1
1
mirror of https://github.com/wader/fq.git synced 2024-11-23 09:56:07 +03:00
fq/pkg/interp/preview.go

56 lines
1.2 KiB
Go
Raw Normal View History

2020-06-08 03:29:51 +03:00
package interp
import (
"encoding/hex"
"fmt"
"strconv"
"github.com/wader/fq/internal/num"
"github.com/wader/fq/pkg/bitio"
"github.com/wader/fq/pkg/decode"
2020-06-08 03:29:51 +03:00
)
func previewValue(v *decode.Value) string {
switch vv := v.V.(type) {
case decode.Array:
return "[]"
case decode.Struct:
return v.Description
case bool:
if vv {
return "true"
}
2021-09-27 12:01:14 +03:00
return "false"
2020-06-08 03:29:51 +03:00
case int64:
// TODO: DisplayFormat is weird
return num.PadFormatInt(vv, decode.DisplayFormatToBase(v.DisplayFormat), true, 0)
case uint64:
return num.PadFormatUint(vv, decode.DisplayFormatToBase(v.DisplayFormat), true, 0)
case float64:
// TODO: float32? better truncated to significant digits?
return strconv.FormatFloat(vv, 'g', -1, 64)
case string:
if len(vv) > 50 {
return fmt.Sprintf("%q", vv[0:50]) + "..."
}
2021-09-27 12:01:14 +03:00
return fmt.Sprintf("%q", vv)
2020-06-08 03:29:51 +03:00
case []byte:
if len(vv) > 16 {
return hex.EncodeToString(vv[0:16]) + "..."
}
2021-09-27 12:01:14 +03:00
return hex.EncodeToString(vv)
2020-06-08 03:29:51 +03:00
case *bitio.Buffer:
vvLen := vv.Len()
if vvLen > 16*8 {
bs, _ := vv.BytesRange(0, 16)
return hex.EncodeToString(bs) + "..."
}
2021-09-27 12:01:14 +03:00
bs, _ := vv.BytesRange(0, int(bitio.BitsByteCount(vvLen)))
return hex.EncodeToString(bs)
2020-06-08 03:29:51 +03:00
case nil:
return "none"
default:
panic("unreachable")
}
}