mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2025-10-29 23:12:26 -05:00
- github.com/KimMachineGun/automemlimit v0.7.2 => v0.7.3
- github.com/gin-contrib/cors v1.7.5 => v1.7.6
- github.com/minio/minio-go/v7 v7.0.92 => v7.0.94
- github.com/spf13/cast v1.8.0 => v1.9.2
- github.com/uptrace/bun{,/*} v1.2.11 => v1.2.14
- golang.org/x/image v0.27.0 => v0.28.0
- golang.org/x/net v0.40.0 => v0.41.0
- code.superseriousbusiness.org/go-swagger v0.31.0-gts-go1.23-fix => v0.32.3-gts-go1.23-fix
Reviewed-on: https://codeberg.org/superseriousbusiness/gotosocial/pulls/4304
Co-authored-by: kim <grufwub@gmail.com>
Co-committed-by: kim <grufwub@gmail.com>
97 lines
2.8 KiB
Go
97 lines
2.8 KiB
Go
// Copyright (c) 2012-2020 Ugorji Nwoke. All rights reserved.
|
|
// Use of this source code is governed by a MIT license found in the LICENSE file.
|
|
|
|
package codec
|
|
|
|
import (
|
|
"reflect"
|
|
)
|
|
|
|
const (
|
|
_ uint8 = iota
|
|
simpleVdNil = 1
|
|
simpleVdFalse = 2
|
|
simpleVdTrue = 3
|
|
simpleVdFloat32 = 4
|
|
simpleVdFloat64 = 5
|
|
|
|
// each lasts for 4 (ie n, n+1, n+2, n+3)
|
|
simpleVdPosInt = 8
|
|
simpleVdNegInt = 12
|
|
|
|
simpleVdTime = 24
|
|
|
|
// containers: each lasts for 8 (ie n, n+1, n+2, ... n+7)
|
|
simpleVdString = 216
|
|
simpleVdByteArray = 224
|
|
simpleVdArray = 232
|
|
simpleVdMap = 240
|
|
simpleVdExt = 248
|
|
)
|
|
|
|
var simpledescNames = map[byte]string{
|
|
simpleVdNil: "null",
|
|
simpleVdFalse: "false",
|
|
simpleVdTrue: "true",
|
|
simpleVdFloat32: "float32",
|
|
simpleVdFloat64: "float64",
|
|
|
|
simpleVdPosInt: "+int",
|
|
simpleVdNegInt: "-int",
|
|
|
|
simpleVdTime: "time",
|
|
|
|
simpleVdString: "string",
|
|
simpleVdByteArray: "binary",
|
|
simpleVdArray: "array",
|
|
simpleVdMap: "map",
|
|
simpleVdExt: "ext",
|
|
}
|
|
|
|
func simpledesc(bd byte) (s string) {
|
|
s = simpledescNames[bd]
|
|
if s == "" {
|
|
s = "unknown"
|
|
}
|
|
return
|
|
}
|
|
|
|
//------------------------------------
|
|
|
|
// SimpleHandle is a Handle for a very simple encoding format.
|
|
//
|
|
// simple is a simplistic codec similar to binc, but not as compact.
|
|
// - Encoding of a value is always preceded by the descriptor byte (bd)
|
|
// - True, false, nil are encoded fully in 1 byte (the descriptor)
|
|
// - Integers (intXXX, uintXXX) are encoded in 1, 2, 4 or 8 bytes (plus a descriptor byte).
|
|
// There are positive (uintXXX and intXXX >= 0) and negative (intXXX < 0) integers.
|
|
// - Floats are encoded in 4 or 8 bytes (plus a descriptor byte)
|
|
// - Length of containers (strings, bytes, array, map, extensions)
|
|
// are encoded in 0, 1, 2, 4 or 8 bytes.
|
|
// Zero-length containers have no length encoded.
|
|
// For others, the number of bytes is given by pow(2, bd%3)
|
|
// - maps are encoded as [bd] [length] [[key][value]]...
|
|
// - arrays are encoded as [bd] [length] [value]...
|
|
// - extensions are encoded as [bd] [length] [tag] [byte]...
|
|
// - strings/bytearrays are encoded as [bd] [length] [byte]...
|
|
// - time.Time are encoded as [bd] [length] [byte]...
|
|
//
|
|
// The full spec will be published soon.
|
|
type SimpleHandle struct {
|
|
binaryEncodingType
|
|
notJsonType
|
|
BasicHandle
|
|
|
|
// EncZeroValuesAsNil says to encode zero values for numbers, bool, string, etc as nil
|
|
EncZeroValuesAsNil bool
|
|
}
|
|
|
|
// Name returns the name of the handle: simple
|
|
func (h *SimpleHandle) Name() string { return "simple" }
|
|
|
|
func (h *SimpleHandle) desc(bd byte) string { return simpledesc(bd) }
|
|
|
|
// SetBytesExt sets an extension
|
|
func (h *SimpleHandle) SetBytesExt(rt reflect.Type, tag uint64, ext BytesExt) (err error) {
|
|
return h.SetExt(rt, tag, makeExt(ext))
|
|
}
|