mirror of
https://github.com/superseriousbusiness/gotosocial
synced 2024-12-26 20:53:10 +00:00
2dc9fc1626
* start moving to bun * changing more stuff * more * and yet more * tests passing * seems stable now * more big changes * small fix * little fixes
43 lines
709 B
Go
43 lines
709 B
Go
package internal
|
|
|
|
import (
|
|
fasthex "github.com/tmthrgd/go-hex"
|
|
)
|
|
|
|
type HexEncoder struct {
|
|
b []byte
|
|
written bool
|
|
}
|
|
|
|
func NewHexEncoder(b []byte) *HexEncoder {
|
|
return &HexEncoder{
|
|
b: b,
|
|
}
|
|
}
|
|
|
|
func (enc *HexEncoder) Bytes() []byte {
|
|
return enc.b
|
|
}
|
|
|
|
func (enc *HexEncoder) Write(b []byte) (int, error) {
|
|
if !enc.written {
|
|
enc.b = append(enc.b, '\'')
|
|
enc.b = append(enc.b, `\x`...)
|
|
enc.written = true
|
|
}
|
|
|
|
i := len(enc.b)
|
|
enc.b = append(enc.b, make([]byte, fasthex.EncodedLen(len(b)))...)
|
|
fasthex.Encode(enc.b[i:], b)
|
|
|
|
return len(b), nil
|
|
}
|
|
|
|
func (enc *HexEncoder) Close() error {
|
|
if enc.written {
|
|
enc.b = append(enc.b, '\'')
|
|
} else {
|
|
enc.b = append(enc.b, "NULL"...)
|
|
}
|
|
return nil
|
|
}
|