joy4/atom/dumper.go
2016-04-01 16:50:12 +08:00

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)))
}