code: func parseStruct(value reflect.Value, token string, ctx *context) error {
  	separator := string(sliceEnvSeparator)
  	if ctx.usingDefault {
  		separator = string(sliceDefaultSeparator)
  	}
  
  	tokens := strings.Split(token[1:len(token)-1], separator)
  	if len(tokens) != value.NumField() {
  		return fmt.Errorf("struct token has %d fields but struct has %d", len(tokens), value.NumField())
  	}
  
  	for i := 0; i < value.NumField(); i++ {
  		field := value.Field(i)
  		t := tokens[i]
  
  		if err := parseValue(field, t, ctx); err != nil {
  			return err
  		}
  	}
  
  	return nil
  }
docs: // NOTE(vincent): this is only called when parsing structs inside a slice.