1 // Licensed under the Apache License, Version 2.0 (the "License"); you may not 2 // use this file except in compliance with the License. You may obtain a copy of 3 // the License at 4 // 5 // http://www.apache.org/licenses/LICENSE-2.0 6 // 7 // Unless required by applicable law or agreed to in writing, software 8 // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 9 // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 10 // License for the specific language governing permissions and limitations under 11 // the License. 12 13 //go:build !js 14 15 package kivikd 16 17 import ( 18 "encoding/json" 19 "fmt" 20 "mime" 21 "net/http" 22 23 "github.com/ajg/form" 24 ) 25 26 // BindParams binds the request form or JSON body to the provided struct. 27 func BindParams(r *http.Request, i interface{}) error { 28 mtype, _, _ := mime.ParseMediaType(r.Header.Get("Content-Type")) 29 switch mtype { 30 case typeJSON: 31 defer r.Body.Close() // nolint: errcheck 32 return json.NewDecoder(r.Body).Decode(i) 33 case typeForm: 34 defer r.Body.Close() // nolint: errcheck 35 return form.NewDecoder(r.Body).Decode(i) 36 } 37 return fmt.Errorf("unable to bind media type %s", mtype) 38 } 39