forked from danielgtaylor/huma
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcbor.go
43 lines (38 loc) · 1.25 KB
/
cbor.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
// Package cbor provides a CBOR formatter for Huma with default configuration.
// Importing this package adds CBOR support to `huma.DefaultFormats`.
package cbor
import (
"io"
"github.com/danielgtaylor/huma/v2"
"github.com/fxamacker/cbor/v2"
)
var cborEncMode, _ = cbor.EncOptions{
// Canonical enc opts
Sort: cbor.SortCanonical,
ShortestFloat: cbor.ShortestFloat16,
NaNConvert: cbor.NaNConvert7e00,
InfConvert: cbor.InfConvertFloat16,
IndefLength: cbor.IndefLengthForbidden,
// Time handling
Time: cbor.TimeUnixDynamic,
TimeTag: cbor.EncTagRequired,
}.EncMode()
// DefaultCBORFormat is the default CBOR formatter that can be set in the API's
// `Config.Formats` map. This is usually not needed as importing this package
// automatically adds the CBOR format to the default formats.
//
// config := huma.Config{}
// config.Formats = map[string]huma.Format{
// "application/cbor": huma.DefaultCBORFormat,
// "cbor": huma.DefaultCBORFormat,
// }
var DefaultCBORFormat = huma.Format{
Marshal: func(w io.Writer, v any) error {
return cborEncMode.NewEncoder(w).Encode(v)
},
Unmarshal: cbor.Unmarshal,
}
func init() {
huma.DefaultFormats["application/cbor"] = DefaultCBORFormat
huma.DefaultFormats["cbor"] = DefaultCBORFormat
}