From 82dbc58f58d6140df03cf1cde6668cf8bd3359af Mon Sep 17 00:00:00 2001 From: Jordan Orelli Date: Wed, 31 Aug 2016 17:01:44 -0400 Subject: [PATCH] pretty in its own file pl0x --- main.go | 67 ------------------------------------------------- pretty.go | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+), 67 deletions(-) create mode 100644 pretty.go diff --git a/main.go b/main.go index a9d9d0d..6fbbad0 100644 --- a/main.go +++ b/main.go @@ -4,7 +4,6 @@ package main //go:generate go run ./gen/main.go ./dota import ( - "bytes" "compress/bzip2" "flag" "fmt" @@ -108,72 +107,6 @@ func printTypes(m proto.Message) { fmt.Println(reflect.TypeOf(m)) } -func prettySlice(v reflect.Value) string { - if v.Type().Elem().Kind() == reflect.Uint8 { - l := v.Len() - if l > 16 { - l = 16 - } - b := make([]byte, l) - for i := 0; i < l; i++ { - b[i] = byte(v.Index(i).Uint()) - } - return fmt.Sprintf("%x", b) - } - - width := 0 - parts := make([]string, 0, v.Len()) - for i := 0; i < v.Len() && width <= 32; i++ { - parts = append(parts, pretty(v.Index(i))) - width += len(parts[i]) // obligatory byte count is not rune count rabble - } - return fmt.Sprintf("[%s]", strings.Join(parts, ", ")) -} - -func prettyStruct(v reflect.Value) string { - var buf bytes.Buffer - fmt.Fprintf(&buf, "{%s ", v.Type()) - for fn := 0; fn < v.NumField(); fn++ { - field := v.Type().Field(fn) - if field.Name == "XXX_unrecognized" { - continue - } - fv := v.Field(fn) - fmt.Fprintf(&buf, "%s: %s ", field.Name, pretty(fv)) - } - fmt.Fprint(&buf, "}") - return buf.String() -} - -func pretty(v reflect.Value) string { - switch v.Kind() { - case reflect.Ptr: - if v.IsNil() { - return "nil" - } - return pretty(v.Elem()) - case reflect.Struct: - return prettyStruct(v) - case reflect.Slice: - return prettySlice(v) - case reflect.String: - return fmt.Sprintf("%q", v.String()) - case reflect.Int32: - return fmt.Sprintf("%d", v.Int()) - case reflect.Uint8, reflect.Uint32: - return fmt.Sprintf("%d", v.Uint()) - case reflect.Bool: - return fmt.Sprintf("%t", v.Bool()) - default: - return v.Type().Name() - } -} - -func prettyPrint(m proto.Message) { - v := reflect.ValueOf(m) - fmt.Println(pretty(v)) -} - func main() { var opts options flag.BoolVar(&opts.b, "b", false, "input is expected to be bzip-compressed") diff --git a/pretty.go b/pretty.go new file mode 100644 index 0000000..a43c18e --- /dev/null +++ b/pretty.go @@ -0,0 +1,74 @@ +package main + +import ( + "bytes" + "fmt" + "reflect" + "strings" + + "github.com/golang/protobuf/proto" +) + +func prettySlice(v reflect.Value) string { + if v.Type().Elem().Kind() == reflect.Uint8 { + l := v.Len() + if l > 16 { + l = 16 + } + b := make([]byte, l) + for i := 0; i < l; i++ { + b[i] = byte(v.Index(i).Uint()) + } + return fmt.Sprintf("%x", b) + } + + width := 0 + parts := make([]string, 0, v.Len()) + for i := 0; i < v.Len() && width <= 32; i++ { + parts = append(parts, pretty(v.Index(i))) + width += len(parts[i]) // obligatory byte count is not rune count rabble + } + return fmt.Sprintf("[%s]", strings.Join(parts, ", ")) +} +func prettyPrint(m proto.Message) { + v := reflect.ValueOf(m) + fmt.Println(pretty(v)) +} +func prettyStruct(v reflect.Value) string { + var buf bytes.Buffer + fmt.Fprintf(&buf, "{%s ", v.Type()) + for fn := 0; fn < v.NumField(); fn++ { + field := v.Type().Field(fn) + if field.Name == "XXX_unrecognized" { + continue + } + fv := v.Field(fn) + fmt.Fprintf(&buf, "%s: %s ", field.Name, pretty(fv)) + } + fmt.Fprint(&buf, "}") + return buf.String() +} + +func pretty(v reflect.Value) string { + switch v.Kind() { + case reflect.Ptr: + if v.IsNil() { + return "nil" + } + return pretty(v.Elem()) + case reflect.Struct: + return prettyStruct(v) + case reflect.Slice: + return prettySlice(v) + case reflect.String: + return fmt.Sprintf("%q", v.String()) + case reflect.Int32: + return fmt.Sprintf("%d", v.Int()) + case reflect.Uint8, reflect.Uint32: + return fmt.Sprintf("%d", v.Uint()) + case reflect.Bool: + return fmt.Sprintf("%t", v.Bool()) + default: + return v.Type().Name() + } +}