Skip to content

Commit

Permalink
Merge pull request #171 from gotd/feat/printer
Browse files Browse the repository at this point in the history
feat(printer): improve interfaces and slices
  • Loading branch information
ernado authored Mar 2, 2021
2 parents 3d58e1a + 4eb1e05 commit 0d4f9f1
Showing 1 changed file with 9 additions and 2 deletions.
11 changes: 9 additions & 2 deletions tdp/tdp.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
package tdp

import (
"encoding/base64"
"fmt"
"reflect"
"strconv"
Expand All @@ -29,21 +30,27 @@ const (

func formatValue(b *strings.Builder, prefix string, opt options, v reflect.Value) {
switch v.Kind() {
case reflect.Struct, reflect.Ptr:
case reflect.Struct, reflect.Ptr, reflect.Interface:
i, ok := v.Interface().(Object)
if ok {
format(b, prefix+defaultIdent, opt, i)
} else if v.CanAddr() {
formatValue(b, prefix, opt, v.Addr())
}
case reflect.Slice:
if buf, ok := v.Interface().([]byte); ok {
b.WriteString(base64.RawURLEncoding.EncodeToString(buf))
return
}

b.WriteRune('\n')
b.WriteString(prefix)
for i := 0; i < v.Len(); i++ {
vi := v.Index(i)
b.WriteString(prefix)
b.WriteString(defaultIdent)
b.WriteString("- ")
formatValue(b, prefix+defaultIdent, opt, vi)
b.WriteRune('\n')
}
default:
b.WriteString(fmt.Sprint(v.Interface()))
Expand Down

0 comments on commit 0d4f9f1

Please sign in to comment.