aboutsummaryrefslogtreecommitdiffhomepage
path: root/vendor/github.com/aws/aws-sdk-go/private/protocol/jsonvalue.go
diff options
context:
space:
mode:
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.go76
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 @@
1package protocol
2
3import (
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
13type EscapeMode uint
14
15// The modes for escaping a value before it is marshaled, and unmarshaled.
16const (
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.
26func 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.
48func 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}