package ber import "fmt" func Dump(b []byte) { dump(b, 0) } func dump(b []byte, indent int) { class, kind, tag, _, value, rest := Split(b) for i := indent; i > 0; i-- { fmt.Print("\t") } switch class { case classUniversal: switch tag { case tagInteger: fmt.Println(tag, UnmarshalInt(value)) case tagObjectIdentifier: fmt.Println(tag, UnmarshalOID(value)) case tagBitString: fmt.Println(tag, UnmarshalBitString(value), value) default: if len(value) > 5 { fmt.Println(tag, kind, value[:5], "...") } else { fmt.Println(tag, kind, value) } } default: if len(value) > 5 { fmt.Println(class, kind, byte(tag), value[:5], "...") } else { fmt.Println(class, kind, byte(tag), value) } } if len(value) > 0 && kind != kindPrimitive { dump(value, indent+1) } if len(rest) > 0 { dump(rest, indent) } }