code: func ScanToken(p []byte) (n int, t ItemType) {
  	if len(p) == 0 {
  		return 0, ItemUndef
  	}
  
  	c := p[0]
  	switch {
  	case OctetTypes[c].IsSeparator():
  		return 1, ItemSeparator
  
  	case OctetTypes[c].IsToken():
  		for n = 1; n < len(p); n++ {
  			c := p[n]
  			if !OctetTypes[c].IsToken() {
  				break
  			}
  		}
  		return n, ItemToken
  
  	default:
  		return -1, ItemUndef
  	}
  }
docs: // ScanToken scan for next token in p. It returns length of the token and its
  // type. It do not trim p.