mirror of
https://github.com/wader/fq.git
synced 2024-12-26 23:15:04 +03:00
59 lines
1.4 KiB
Go
59 lines
1.4 KiB
Go
package interp
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"math/big"
|
|
"strconv"
|
|
"strings"
|
|
|
|
"github.com/wader/fq/internal/mathex"
|
|
"github.com/wader/fq/internal/stringsex"
|
|
"github.com/wader/fq/pkg/bitio"
|
|
"github.com/wader/fq/pkg/scalar"
|
|
)
|
|
|
|
func previewValue(v any, df scalar.DisplayFormat) string {
|
|
switch vv := v.(type) {
|
|
case bool:
|
|
if vv {
|
|
return "true"
|
|
}
|
|
return "false"
|
|
case int:
|
|
// TODO: DisplayFormat is weird
|
|
return mathex.PadFormatInt(int64(vv), df.FormatBase(), true, 0)
|
|
case int64:
|
|
// TODO: DisplayFormat is weird
|
|
return mathex.PadFormatInt(vv, df.FormatBase(), true, 0)
|
|
case uint64:
|
|
return mathex.PadFormatUint(vv, df.FormatBase(), true, 0)
|
|
case float64:
|
|
// TODO: float32? better truncated to significant digits?
|
|
return strconv.FormatFloat(vv, 'g', -1, 64)
|
|
case string:
|
|
s := strconv.Quote(stringsex.TrimN(vv, 50, "..."))
|
|
// TODO: hack for https://github.com/golang/go/issues/52062
|
|
// 0x7f used to be escaped as \u007f in 1.18 and lower, was changed to \x7f
|
|
// remove once 1.18 is not supported
|
|
if !bytes.Contains([]byte(s), []byte{0x7f}) {
|
|
return s
|
|
}
|
|
return strings.ReplaceAll(s, `\u007f`, `\x7f`)
|
|
case nil:
|
|
return "null"
|
|
case bitio.Reader,
|
|
Binary:
|
|
return "raw bits"
|
|
case *big.Int:
|
|
return mathex.PadFormatBigInt(vv, df.FormatBase(), true, 0)
|
|
case map[string]any:
|
|
return "{}"
|
|
case []any:
|
|
return "[]"
|
|
|
|
default:
|
|
panic(fmt.Sprintf("unreachable %v (%T)", v, v))
|
|
}
|
|
}
|