]> git.immae.eu Git - github/fretlink/terraform-provider-statuscake.git/blob - 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
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 func StringValue(i interface{}) string {
12 var buf bytes.Buffer
13 stringValue(reflect.ValueOf(i), 0, &buf)
14 return buf.String()
15 }
16
17 func 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
26 for i := 0; i < v.Type().NumField(); i++ {
27 ft := v.Type().Field(i)
28 fv := v.Field(i)
29
30 if ft.Name[0:1] == strings.ToLower(ft.Name[0:1]) {
31 continue // ignore unexported fields
32 }
33 if (fv.Kind() == reflect.Ptr || fv.Kind() == reflect.Slice) && fv.IsNil() {
34 continue // ignore unset fields
35 }
36
37 buf.WriteString(strings.Repeat(" ", indent+2))
38 buf.WriteString(ft.Name + ": ")
39
40 if tag := ft.Tag.Get("sensitive"); tag == "true" {
41 buf.WriteString("<sensitive>")
42 } else {
43 stringValue(fv, indent+2, buf)
44 }
45
46 buf.WriteString(",\n")
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 }