mirror of
https://github.com/diamondburned/arikawa.git
synced 2024-11-01 20:45:42 +00:00
32 lines
549 B
Go
32 lines
549 B
Go
|
package httputil
|
||
|
|
||
|
import (
|
||
|
"net/url"
|
||
|
"sync"
|
||
|
|
||
|
"github.com/gorilla/schema"
|
||
|
)
|
||
|
|
||
|
// SchemaEncoder expects the encoder to read the "schema" tags.
|
||
|
type SchemaEncoder interface {
|
||
|
Encode(src interface{}) (url.Values, error)
|
||
|
}
|
||
|
|
||
|
type DefaultSchema struct {
|
||
|
once sync.Once
|
||
|
*schema.Encoder
|
||
|
}
|
||
|
|
||
|
var _ SchemaEncoder = (*DefaultSchema)(nil)
|
||
|
|
||
|
func (d *DefaultSchema) Encode(src interface{}) (url.Values, error) {
|
||
|
if d.Encoder == nil {
|
||
|
d.once.Do(func() {
|
||
|
d.Encoder = schema.NewEncoder()
|
||
|
})
|
||
|
}
|
||
|
|
||
|
var v = url.Values{}
|
||
|
return v, d.Encoder.Encode(src, v)
|
||
|
}
|