]> git.immae.eu Git - github/fretlink/terraform-provider-statuscake.git/blob - vendor/github.com/aws/aws-sdk-go/aws/awsutil/string_value.go
Initial transfer of provider code
[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 names := []string{}
27 for i := 0; i < v.Type().NumField(); i++ {
28 name := v.Type().Field(i).Name
29 f := v.Field(i)
30 if name[0:1] == strings.ToLower(name[0:1]) {
31 continue // ignore unexported fields
32 }
33 if (f.Kind() == reflect.Ptr || f.Kind() == reflect.Slice) && f.IsNil() {
34 continue // ignore unset fields
35 }
36 names = append(names, name)
37 }
38
39 for i, n := range names {
40 val := v.FieldByName(n)
41 buf.WriteString(strings.Repeat(" ", indent+2))
42 buf.WriteString(n + ": ")
43 stringValue(val, indent+2, buf)
44
45 if i < len(names)-1 {
46 buf.WriteString(",\n")
47 }
48 }
49
50 buf.WriteString("\n" + strings.Repeat(" ", indent) + "}")
51 case reflect.Slice:
52 nl, id, id2 := "", "", ""
53 if v.Len() > 3 {
54 nl, id, id2 = "\n", strings.Repeat(" ", indent), strings.Repeat(" ", indent+2)
55 }
56 buf.WriteString("[" + nl)
57 for i := 0; i < v.Len(); i++ {
58 buf.WriteString(id2)
59 stringValue(v.Index(i), indent+2, buf)
60
61 if i < v.Len()-1 {
62 buf.WriteString("," + nl)
63 }
64 }
65
66 buf.WriteString(nl + id + "]")
67 case reflect.Map:
68 buf.WriteString("{\n")
69
70 for i, k := range v.MapKeys() {
71 buf.WriteString(strings.Repeat(" ", indent+2))
72 buf.WriteString(k.String() + ": ")
73 stringValue(v.MapIndex(k), indent+2, buf)
74
75 if i < v.Len()-1 {
76 buf.WriteString(",\n")
77 }
78 }
79
80 buf.WriteString("\n" + strings.Repeat(" ", indent) + "}")
81 default:
82 format := "%v"
83 switch v.Interface().(type) {
84 case string:
85 format = "%q"
86 }
87 fmt.Fprintf(buf, format, v.Interface())
88 }
89 }