summaryrefslogtreecommitdiff
path: root/vendor/github.com/uptrace/bun/internal/hex.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/uptrace/bun/internal/hex.go')
-rw-r--r--vendor/github.com/uptrace/bun/internal/hex.go43
1 files changed, 43 insertions, 0 deletions
diff --git a/vendor/github.com/uptrace/bun/internal/hex.go b/vendor/github.com/uptrace/bun/internal/hex.go
new file mode 100644
index 000000000..6fae2bb78
--- /dev/null
+++ b/vendor/github.com/uptrace/bun/internal/hex.go
@@ -0,0 +1,43 @@
+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
+}