[#1223] lens/tui: Add raw data handling

Signed-off-by: Aleksey Savchuk <a.savchuk@yadro.com>
This commit is contained in:
Aleksey Savchuk 2024-08-14 11:27:40 +03:00
parent 358083a539
commit 8ddea4b8b2
No known key found for this signature in database
2 changed files with 12 additions and 40 deletions

View file

@ -2,56 +2,28 @@ package common
import (
"github.com/davecgh/go-spew/spew"
"github.com/gdamore/tcell/v2"
"github.com/mr-tron/base58"
)
type Raw struct {
type RawEntry struct {
key, value []byte
}
var RawParser Parser = rawParser
func rawParser(key, value []byte) (SchemaEntry, Parser, error) {
return &Raw{key: key, value: value}, rawParser, nil
return &RawEntry{key: key, value: value}, rawParser, nil
}
func (r *Raw) String() string {
return "[red]can't parse[white]"
func (r *RawEntry) String() string {
return FormatSimple(base58.Encode(r.key), tcell.ColorRed)
}
func (r *Raw) DetailedString() string {
func (r *RawEntry) DetailedString() string {
return spew.Sdump(r)
}
func (r *Raw) Filter(string, any) FilterResult {
func (r *RawEntry) Filter(string, any) FilterResult {
return No
}
// TODO: enhance unparsed data display
// func WithErrorHandling(parser Parser) Parser {
// if parser == nil {
// return rawParser
// }
// return func(key, value []byte) (SchemaEntry, Parser, error) {
// entry, next, err := parser(key, value)
// if err != nil {
// return &Error{err: err}, rawParser, nil
// }
// return entry, WithErrorHandling(next), err
// }
// }
// type Error struct {
// err error
// }
// func (e *Error) String() string {
// return e.err.Error()
// }
// func (e *Error) DetailedString() string {
// return e.err.Error()
// }
// func (e *Error) Filter(string, any) FilterResult {
// return No
// }

View file

@ -36,15 +36,15 @@ type (
func Any(parsers ...Parser) Parser {
return func(key, value []byte) (SchemaEntry, Parser, error) {
errs := fmt.Errorf("try parse %v %v", key, value)
for _, p := range parsers {
ret, next, err := p(key, value)
var errs error
for _, parser := range parsers {
ret, next, err := parser(key, value)
if err == nil {
return ret, next, nil
}
errs = errors.Join(errs, err)
}
return nil, nil, fmt.Errorf("no parser succeeded:\n%w", errs)
return nil, nil, fmt.Errorf("no parser succeeded: %w", errs)
}
}