github.com/aavshr/aws-sdk-go@v1.41.3/aws/awsutil/string_value.go (about) 1 package awsutil 2 3 import ( 4 "bytes" 5 "fmt" 6 "reflect" 7 "strings" 8 ) 9 10 // StringValue returns the string representation of a value. 11 // 12 // Deprecated: Use Prettify instead. 13 func StringValue(i interface{}) string { 14 var buf bytes.Buffer 15 stringValue(reflect.ValueOf(i), 0, &buf) 16 return buf.String() 17 } 18 19 func stringValue(v reflect.Value, indent int, buf *bytes.Buffer) { 20 for v.Kind() == reflect.Ptr { 21 v = v.Elem() 22 } 23 24 switch v.Kind() { 25 case reflect.Struct: 26 buf.WriteString("{\n") 27 28 for i := 0; i < v.Type().NumField(); i++ { 29 ft := v.Type().Field(i) 30 fv := v.Field(i) 31 32 if ft.Name[0:1] == strings.ToLower(ft.Name[0:1]) { 33 continue // ignore unexported fields 34 } 35 if (fv.Kind() == reflect.Ptr || fv.Kind() == reflect.Slice) && fv.IsNil() { 36 continue // ignore unset fields 37 } 38 39 buf.WriteString(strings.Repeat(" ", indent+2)) 40 buf.WriteString(ft.Name + ": ") 41 42 if tag := ft.Tag.Get("sensitive"); tag == "true" { 43 buf.WriteString("<sensitive>") 44 } else { 45 stringValue(fv, indent+2, buf) 46 } 47 48 buf.WriteString(",\n") 49 } 50 51 buf.WriteString("\n" + strings.Repeat(" ", indent) + "}") 52 case reflect.Slice: 53 nl, id, id2 := "", "", "" 54 if v.Len() > 3 { 55 nl, id, id2 = "\n", strings.Repeat(" ", indent), strings.Repeat(" ", indent+2) 56 } 57 buf.WriteString("[" + nl) 58 for i := 0; i < v.Len(); i++ { 59 buf.WriteString(id2) 60 stringValue(v.Index(i), indent+2, buf) 61 62 if i < v.Len()-1 { 63 buf.WriteString("," + nl) 64 } 65 } 66 67 buf.WriteString(nl + id + "]") 68 case reflect.Map: 69 buf.WriteString("{\n") 70 71 for i, k := range v.MapKeys() { 72 buf.WriteString(strings.Repeat(" ", indent+2)) 73 buf.WriteString(k.String() + ": ") 74 stringValue(v.MapIndex(k), indent+2, buf) 75 76 if i < v.Len()-1 { 77 buf.WriteString(",\n") 78 } 79 } 80 81 buf.WriteString("\n" + strings.Repeat(" ", indent) + "}") 82 default: 83 format := "%v" 84 switch v.Interface().(type) { 85 case string: 86 format = "%q" 87 } 88 fmt.Fprintf(buf, format, v.Interface()) 89 } 90 }