| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- // Copyright 2014 Manu Martinez-Almeida. All rights reserved.
- // Use of this source code is governed by a MIT style
- // license that can be found in the LICENSE file.
- package binding
- import (
- "net/http"
- "reflect"
- "gopkg.in/bluesuncorp/validator.v5"
- )
- const (
- MIMEJSON = "application/json"
- MIMEHTML = "text/html"
- MIMEXML = "application/xml"
- MIMEXML2 = "text/xml"
- MIMEPlain = "text/plain"
- MIMEPOSTForm = "application/x-www-form-urlencoded"
- MIMEMultipartPOSTForm = "multipart/form-data"
- )
- type Binding interface {
- Name() string
- Bind(*http.Request, interface{}) error
- }
- var validate = validator.New("binding", validator.BakedInValidators)
- var (
- JSON = jsonBinding{}
- XML = xmlBinding{}
- Form = formBinding{}
- )
- func Default(method, contentType string) Binding {
- if method == "GET" {
- return Form
- } else {
- switch contentType {
- case MIMEJSON:
- return JSON
- case MIMEXML, MIMEXML2:
- return XML
- default: //case MIMEPOSTForm, MIMEMultipartPOSTForm:
- return Form
- }
- }
- }
- func ValidateField(f interface{}, tag string) error {
- if err := validate.Field(f, tag); err != nil {
- return error(err)
- }
- return nil
- }
- func Validate(obj interface{}) error {
- if kindOfData(obj) != reflect.Struct {
- return nil
- }
- if err := validate.Struct(obj); err != nil {
- return error(err)
- }
- return nil
- }
- func kindOfData(data interface{}) reflect.Kind {
- value := reflect.ValueOf(data)
- valueType := value.Kind()
- if valueType == reflect.Ptr {
- valueType = value.Elem().Kind()
- }
- return valueType
- }
|