diff options
Diffstat (limited to 'vendor/github.com/aws/aws-sdk-go/private/protocol/jsonvalue.go')
-rw-r--r-- | vendor/github.com/aws/aws-sdk-go/private/protocol/jsonvalue.go | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/jsonvalue.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/jsonvalue.go new file mode 100644 index 0000000..776d110 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/jsonvalue.go | |||
@@ -0,0 +1,76 @@ | |||
1 | package protocol | ||
2 | |||
3 | import ( | ||
4 | "encoding/base64" | ||
5 | "encoding/json" | ||
6 | "fmt" | ||
7 | "strconv" | ||
8 | |||
9 | "github.com/aws/aws-sdk-go/aws" | ||
10 | ) | ||
11 | |||
12 | // EscapeMode is the mode that should be use for escaping a value | ||
13 | type EscapeMode uint | ||
14 | |||
15 | // The modes for escaping a value before it is marshaled, and unmarshaled. | ||
16 | const ( | ||
17 | NoEscape EscapeMode = iota | ||
18 | Base64Escape | ||
19 | QuotedEscape | ||
20 | ) | ||
21 | |||
22 | // EncodeJSONValue marshals the value into a JSON string, and optionally base64 | ||
23 | // encodes the string before returning it. | ||
24 | // | ||
25 | // Will panic if the escape mode is unknown. | ||
26 | func EncodeJSONValue(v aws.JSONValue, escape EscapeMode) (string, error) { | ||
27 | b, err := json.Marshal(v) | ||
28 | if err != nil { | ||
29 | return "", err | ||
30 | } | ||
31 | |||
32 | switch escape { | ||
33 | case NoEscape: | ||
34 | return string(b), nil | ||
35 | case Base64Escape: | ||
36 | return base64.StdEncoding.EncodeToString(b), nil | ||
37 | case QuotedEscape: | ||
38 | return strconv.Quote(string(b)), nil | ||
39 | } | ||
40 | |||
41 | panic(fmt.Sprintf("EncodeJSONValue called with unknown EscapeMode, %v", escape)) | ||
42 | } | ||
43 | |||
44 | // DecodeJSONValue will attempt to decode the string input as a JSONValue. | ||
45 | // Optionally decoding base64 the value first before JSON unmarshaling. | ||
46 | // | ||
47 | // Will panic if the escape mode is unknown. | ||
48 | func DecodeJSONValue(v string, escape EscapeMode) (aws.JSONValue, error) { | ||
49 | var b []byte | ||
50 | var err error | ||
51 | |||
52 | switch escape { | ||
53 | case NoEscape: | ||
54 | b = []byte(v) | ||
55 | case Base64Escape: | ||
56 | b, err = base64.StdEncoding.DecodeString(v) | ||
57 | case QuotedEscape: | ||
58 | var u string | ||
59 | u, err = strconv.Unquote(v) | ||
60 | b = []byte(u) | ||
61 | default: | ||
62 | panic(fmt.Sprintf("DecodeJSONValue called with unknown EscapeMode, %v", escape)) | ||
63 | } | ||
64 | |||
65 | if err != nil { | ||
66 | return nil, err | ||
67 | } | ||
68 | |||
69 | m := aws.JSONValue{} | ||
70 | err = json.Unmarshal(b, &m) | ||
71 | if err != nil { | ||
72 | return nil, err | ||
73 | } | ||
74 | |||
75 | return m, nil | ||
76 | } | ||