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