github.com/diamondburned/arikawa/v2@v2.1.0/utils/httputil/schema.go (about)

     1  package httputil
     2  
     3  import (
     4  	"net/url"
     5  	"sync"
     6  
     7  	"github.com/gorilla/schema"
     8  )
     9  
    10  // SchemaEncoder expects the encoder to read the "schema" tags.
    11  type SchemaEncoder interface {
    12  	Encode(src interface{}) (url.Values, error)
    13  }
    14  
    15  type DefaultSchema struct {
    16  	once sync.Once
    17  	*schema.Encoder
    18  }
    19  
    20  var _ SchemaEncoder = (*DefaultSchema)(nil)
    21  
    22  func (d *DefaultSchema) Encode(src interface{}) (url.Values, error) {
    23  	if d.Encoder == nil {
    24  		d.once.Do(func() {
    25  			d.Encoder = schema.NewEncoder()
    26  		})
    27  	}
    28  
    29  	var v = url.Values{}
    30  	return v, d.Encoder.Encode(src, v)
    31  }