func Decode(header http.Header, v interface{}) error {
	val := reflect.ValueOf(v)
	if val.Kind() != reflect.Ptr || val.IsNil() {
		return fmt.Errorf("v should be point and should not be nil")
	}
	for val.Kind() == reflect.Ptr {
		val = val.Elem()
	}
	if val.Kind() != reflect.Struct {
		return fmt.Errorf("v is not a struct %+v", val.Kind())
	}
	return parseValue(header, val)
}
Decode expects to be passed an http.Header and a struct, and parses
header into the struct recursively using the same rules as Header (see above)
package httpheader
import (
	"fmt"
	"net/http"
	"net/textproto"
	"reflect"
	"strconv"
	"time"
)
type Decoder interface {
	DecodeHeader(header http.Header, key string) error
}