summaryrefslogtreecommitdiff
path: root/vendor/codeberg.org/gruf/go-kv/format/formatter.go
diff options
context:
space:
mode:
authorLibravatar Terin Stock <terinjokes@gmail.com>2025-03-09 17:47:56 +0100
committerLibravatar Terin Stock <terinjokes@gmail.com>2025-03-10 01:59:49 +0100
commit3ac1ee16f377d31a0fb80c8dae28b6239ac4229e (patch)
treef61faa581feaaeaba2542b9f2b8234a590684413 /vendor/codeberg.org/gruf/go-kv/format/formatter.go
parent[chore] update URLs to forked source (diff)
downloadgotosocial-3ac1ee16f377d31a0fb80c8dae28b6239ac4229e.tar.xz
[chore] remove vendor
Diffstat (limited to 'vendor/codeberg.org/gruf/go-kv/format/formatter.go')
-rw-r--r--vendor/codeberg.org/gruf/go-kv/format/formatter.go349
1 files changed, 0 insertions, 349 deletions
diff --git a/vendor/codeberg.org/gruf/go-kv/format/formatter.go b/vendor/codeberg.org/gruf/go-kv/format/formatter.go
deleted file mode 100644
index fd8cf98df..000000000
--- a/vendor/codeberg.org/gruf/go-kv/format/formatter.go
+++ /dev/null
@@ -1,349 +0,0 @@
-package format
-
-import (
- "strconv"
- "strings"
-
- "codeberg.org/gruf/go-byteutil"
-)
-
-// Formatter allows configuring value and string formatting.
-type Formatter struct {
- // MaxDepth specifies the max depth of fields the formatter will iterate.
- // Once max depth is reached, value will simply be formatted as "...".
- // e.g.
- //
- // MaxDepth=1
- // type A struct{
- // Nested B
- // }
- // type B struct{
- // Nested C
- // }
- // type C struct{
- // Field string
- // }
- //
- // Append(&buf, A{}) => {Nested={Nested={Field=...}}}
- MaxDepth uint8
-}
-
-// Append will append formatted form of supplied values into 'buf'.
-func (f *Formatter) Append(buf *byteutil.Buffer, v ...interface{}) {
- fmt := format{Buffer: buf, Config: f}
- for i := 0; i < len(v); i++ {
- fmt.AppendInterfaceOrReflect(v[i])
- fmt.Buffer.B = append(fmt.Buffer.B, ' ')
- }
- if len(v) > 0 {
- fmt.Buffer.Truncate(1)
- }
-}
-
-// Appendf will append the formatted string with supplied values into 'buf'.
-// Supported format directives:
-// - '{}' => format supplied arg, in place
-// - '{0}' => format arg at index 0 of supplied, in place
-// - '{:?}' => format supplied arg verbosely, in place
-// - '{:k}' => format supplied arg as key, in place
-// - '{:v}' => format supplied arg as value, in place
-//
-// To escape either of '{}' simply append an additional brace e.g.
-// - '{{' => '{'
-// - '}}' => '}'
-// - '{{}}' => '{}'
-// - '{{:?}}' => '{:?}'
-//
-// More formatting directives might be included in the future.
-func (f *Formatter) Appendf(buf *byteutil.Buffer, s string, a ...interface{}) {
- const (
- // ground state
- modeNone = uint8(0)
-
- // prev reached '{'
- modeOpen = uint8(1)
-
- // prev reached '}'
- modeClose = uint8(2)
-
- // parsing directive index
- modeIdx = uint8(3)
-
- // parsing directive operands
- modeOp = uint8(4)
- )
-
- var (
- // mode is current parsing mode
- mode uint8
-
- // arg is the current arg index
- arg int
-
- // carg is current directive-set arg index
- carg int
-
- // last is the trailing cursor to see slice windows
- last int
-
- // idx is the current index in 's'
- idx int
-
- // fmt is the base argument formatter
- fmt = format{
- Config: f,
- Buffer: buf,
- }
-
- // NOTE: these functions are defined here as function
- // locals as it turned out to be better for performance
- // doing it this way, than encapsulating their logic in
- // some kind of parsing structure. Maybe if the parser
- // was pooled along with the buffers it might work out
- // better, but then it makes more internal functions i.e.
- // .Append() .Appendf() less accessible outside package.
- //
- // Currently, passing '-gcflags "-l=4"' causes a not
- // insignificant decrease in ns/op, which is likely due
- // to more aggressive function inlining, which this
- // function can obviously stand to benefit from :)
-
- // Str returns current string window slice, and updates
- // the trailing cursor 'last' to current 'idx'
- Str = func() string {
- str := s[last:idx]
- last = idx
- return str
- }
-
- // MoveUp moves the trailing cursor 'last' just past 'idx'
- MoveUp = func() {
- last = idx + 1
- }
-
- // MoveUpTo moves the trailing cursor 'last' either up to
- // closest '}', or current 'idx', whichever is furthest.
- // NOTE: by calling bytealg.IndexByteString() directly (and
- // not the strconv pass-through, we shave-off complexity
- // which allows this function to be inlined).
- MoveUpTo = func() {
- i := strings.IndexByte(s[idx:], '}')
- if i >= 0 {
- idx += i
- }
- MoveUp()
- }
-
- // ParseIndex parses an integer from the current string
- // window, updating 'last' to 'idx'. The string window
- // is ASSUMED to contain only valid ASCII numbers. This
- // only returns false if number exceeds platform int size
- ParseIndex = func() bool {
- var str string
-
- // Get current window
- if str = Str(); len(str) < 1 {
- return true
- }
-
- // Index HAS to fit within platform integer size
- if !(strconv.IntSize == 32 && (0 < len(s) && len(s) < 10)) ||
- !(strconv.IntSize == 64 && (0 < len(s) && len(s) < 19)) {
- return false
- }
-
- carg = 0
-
- // Build integer from string
- for i := 0; i < len(str); i++ {
- carg = carg*10 + int(str[i]-'0')
- }
-
- return true
- }
-
- // ValidOp checks that for current ending idx, that a valid
- // operand was achieved -- only 0, 1 are valid numbers.
- ValidOp = func() bool {
- diff := (idx - last)
- last = idx
- return diff < 2
- }
-
- // AppendArg will take either the directive-set, or
- // iterated arg index, check within bounds of 'a' and
- // append the that argument formatted to the buffer.
- // On failure, it will append an error string
- AppendArg = func() {
- // Look for idx
- if carg < 0 {
- carg = arg
- }
-
- // Incr idx
- arg++
-
- if carg < len(a) {
- // Append formatted argument value
- fmt.AppendInterfaceOrReflect(a[carg])
- } else {
- // No argument found for index
- fmt.Buffer.B = append(fmt.Buffer.B, `!{MISSING_ARG}`...)
- }
- }
-
- // Reset will reset the mode to ground, the flags
- // to empty and parsed 'carg' to empty
- Reset = func() {
- mode = modeNone
- fmt.CurDepth = 0
- fmt.Flags = 0
- fmt.VType = ""
- fmt.Derefs = 0
- carg = -1
- }
- )
-
- for idx = 0; idx < len(s); idx++ {
- // Get next char
- c := s[idx]
-
- switch mode {
- // Ground mode
- case modeNone:
- switch c {
- case '{':
- // Enter open mode
- fmt.Buffer.B = append(fmt.Buffer.B, Str()...)
- mode = modeOpen
- MoveUp()
- case '}':
- // Enter close mode
- fmt.Buffer.B = append(fmt.Buffer.B, Str()...)
- mode = modeClose
- MoveUp()
- }
-
- // Encountered open '{'
- case modeOpen:
- switch c {
- case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':
- // Starting index
- mode = modeIdx
- MoveUp()
- case '{':
- // Escaped bracket
- fmt.Buffer.B = append(fmt.Buffer.B, '{')
- mode = modeNone
- MoveUp()
- case '}':
- // Format arg
- AppendArg()
- Reset()
- MoveUp()
- case ':':
- // Starting operands
- mode = modeOp
- MoveUp()
- default:
- // Bad char, missing a close
- fmt.Buffer.B = append(fmt.Buffer.B, `!{MISSING_CLOSE}`...)
- mode = modeNone
- MoveUpTo()
- }
-
- // Encountered close '}'
- case modeClose:
- switch c {
- case '}':
- // Escaped close bracket
- fmt.Buffer.B = append(fmt.Buffer.B, '}')
- mode = modeNone
- MoveUp()
- default:
- // Missing an open bracket
- fmt.Buffer.B = append(fmt.Buffer.B, `!{MISSING_OPEN}`...)
- mode = modeNone
- MoveUp()
- }
-
- // Preparing index
- case modeIdx:
- switch c {
- case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':
- case ':':
- if !ParseIndex() {
- // Unable to parse an integer
- fmt.Buffer.B = append(fmt.Buffer.B, `!{BAD_INDEX}`...)
- mode = modeNone
- MoveUpTo()
- } else {
- // Starting operands
- mode = modeOp
- MoveUp()
- }
- case '}':
- if !ParseIndex() {
- // Unable to parse an integer
- fmt.Buffer.B = append(fmt.Buffer.B, `!{BAD_INDEX}`...)
- } else {
- // Format arg
- AppendArg()
- }
- Reset()
- MoveUp()
- default:
- // Not a valid index character
- fmt.Buffer.B = append(fmt.Buffer.B, `!{BAD_INDEX}`...)
- mode = modeNone
- MoveUpTo()
- }
-
- // Preparing operands
- case modeOp:
- switch c {
- case 'k':
- fmt.Flags |= IsKeyBit
- case 'v':
- fmt.Flags |= IsValBit
- case '?':
- fmt.Flags |= VboseBit
- case '}':
- if !ValidOp() {
- // Bad operands parsed
- fmt.Buffer.B = append(fmt.Buffer.B, `!{BAD_OPERAND}`...)
- } else {
- // Format arg
- AppendArg()
- }
- Reset()
- MoveUp()
- default:
- // Not a valid operand char
- fmt.Buffer.B = append(fmt.Buffer.B, `!{BAD_OPERAND}`...)
- Reset()
- MoveUpTo()
- }
- }
- }
-
- // Append any remaining
- fmt.Buffer.B = append(fmt.Buffer.B, s[last:]...)
-}
-
-// formatter is the default formatter instance.
-var formatter = Formatter{
- MaxDepth: 10,
-}
-
-// Append will append formatted form of supplied values into 'buf' using default formatter.
-// See Formatter.Append() for more documentation.
-func Append(buf *byteutil.Buffer, v ...interface{}) {
- formatter.Append(buf, v...)
-}
-
-// Appendf will append the formatted string with supplied values into 'buf' using default formatter.
-// See Formatter.Appendf() for more documentation.
-func Appendf(buf *byteutil.Buffer, s string, a ...interface{}) {
- formatter.Appendf(buf, s, a...)
-}