mirror of https://github.com/containers/podman.git
51 lines
1.1 KiB
Go
51 lines
1.1 KiB
Go
package handlers
|
|
|
|
import (
|
|
"encoding/json"
|
|
"reflect"
|
|
"time"
|
|
|
|
"github.com/gorilla/schema"
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
|
|
// NewAPIDecoder returns a configured schema.Decoder
|
|
func NewAPIDecoder() *schema.Decoder {
|
|
d := schema.NewDecoder()
|
|
d.IgnoreUnknownKeys(true)
|
|
d.RegisterConverter(map[string][]string{}, convertUrlValuesString)
|
|
d.RegisterConverter(time.Time{}, convertTimeString)
|
|
return d
|
|
}
|
|
|
|
// On client:
|
|
// v := map[string][]string{
|
|
// "dangling": {"true"},
|
|
// }
|
|
//
|
|
// payload, err := jsoniter.MarshalToString(v)
|
|
// if err != nil {
|
|
// panic(err)
|
|
// }
|
|
// payload = url.QueryEscape(payload)
|
|
func convertUrlValuesString(query string) reflect.Value {
|
|
f := map[string][]string{}
|
|
|
|
err := json.Unmarshal([]byte(query), &f)
|
|
if err != nil {
|
|
logrus.Infof("convertUrlValuesString: Failed to Unmarshal %s: %s", query, err.Error())
|
|
}
|
|
|
|
return reflect.ValueOf(f)
|
|
}
|
|
|
|
func convertTimeString(query string) reflect.Value {
|
|
t, err := time.Parse(time.RFC3339, query)
|
|
if err != nil {
|
|
logrus.Infof("convertTimeString: Failed to Unmarshal %s: %s", query, err.Error())
|
|
|
|
return reflect.ValueOf(time.Time{})
|
|
}
|
|
return reflect.ValueOf(t)
|
|
}
|