87 lines
1.5 KiB
Go
87 lines
1.5 KiB
Go
|
|
package atom
|
|
|
|
import (
|
|
"io"
|
|
"fmt"
|
|
"strings"
|
|
"encoding/hex"
|
|
)
|
|
|
|
type Walker interface {
|
|
FilterArrayItem(string,string,int,int) bool
|
|
ArrayLeft(int,int)
|
|
StartStruct(string)
|
|
EndStruct()
|
|
Name(string)
|
|
Int(int)
|
|
Fixed(Fixed)
|
|
String(string)
|
|
Bytes([]byte)
|
|
TimeStamp(TimeStamp)
|
|
}
|
|
|
|
type Dumper struct {
|
|
W io.Writer
|
|
depth int
|
|
name string
|
|
arrlen int
|
|
arridx int
|
|
}
|
|
|
|
func (self Dumper) tab() string {
|
|
return strings.Repeat(" ", self.depth*2)
|
|
}
|
|
|
|
func (self Dumper) println(msg string) {
|
|
fmt.Fprintln(self.W, self.tab()+msg)
|
|
}
|
|
|
|
func (self *Dumper) ArrayLeft(i int, n int) {
|
|
self.println(fmt.Sprintf("... total %d elements", n))
|
|
}
|
|
|
|
func (self *Dumper) FilterArrayItem(name string, field string, i int, n int) bool {
|
|
if n > 20 && i > 20 {
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
|
|
func (self *Dumper) EndArray() {
|
|
}
|
|
|
|
func (self *Dumper) StartStruct(name string) {
|
|
self.depth++
|
|
self.println(fmt.Sprintf("[%s]", name))
|
|
}
|
|
|
|
func (self *Dumper) EndStruct() {
|
|
self.depth--
|
|
}
|
|
|
|
func (self *Dumper) Name(name string) {
|
|
self.name = name
|
|
}
|
|
|
|
func (self Dumper) Int(val int) {
|
|
self.println(fmt.Sprintf("%s: %d", self.name, val))
|
|
}
|
|
|
|
func (self Dumper) String(val string) {
|
|
self.println(fmt.Sprintf("%s: %s", self.name, val))
|
|
}
|
|
|
|
func (self Dumper) Fixed(val Fixed) {
|
|
self.println(fmt.Sprintf("%s: %d", self.name, FixedToInt(val)))
|
|
}
|
|
|
|
func (self Dumper) Bytes(val []byte) {
|
|
self.println(fmt.Sprintf("%s: %s", self.name, hex.EncodeToString(val)))
|
|
}
|
|
|
|
func (self Dumper) TimeStamp(val TimeStamp) {
|
|
self.println(fmt.Sprintf("%s: %d", self.name, int(val)))
|
|
}
|
|
|