You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
117 lines
2.5 KiB
117 lines
2.5 KiB
package objx |
|
|
|
import ( |
|
"bytes" |
|
"encoding/base64" |
|
"encoding/json" |
|
"errors" |
|
"fmt" |
|
"net/url" |
|
) |
|
|
|
// JSON converts the contained object to a JSON string |
|
// representation |
|
func (m Map) JSON() (string, error) { |
|
|
|
result, err := json.Marshal(m) |
|
|
|
if err != nil { |
|
err = errors.New("objx: JSON encode failed with: " + err.Error()) |
|
} |
|
|
|
return string(result), err |
|
|
|
} |
|
|
|
// MustJSON converts the contained object to a JSON string |
|
// representation and panics if there is an error |
|
func (m Map) MustJSON() string { |
|
result, err := m.JSON() |
|
if err != nil { |
|
panic(err.Error()) |
|
} |
|
return result |
|
} |
|
|
|
// Base64 converts the contained object to a Base64 string |
|
// representation of the JSON string representation |
|
func (m Map) Base64() (string, error) { |
|
|
|
var buf bytes.Buffer |
|
|
|
jsonData, err := m.JSON() |
|
if err != nil { |
|
return "", err |
|
} |
|
|
|
encoder := base64.NewEncoder(base64.StdEncoding, &buf) |
|
encoder.Write([]byte(jsonData)) |
|
encoder.Close() |
|
|
|
return buf.String(), nil |
|
|
|
} |
|
|
|
// MustBase64 converts the contained object to a Base64 string |
|
// representation of the JSON string representation and panics |
|
// if there is an error |
|
func (m Map) MustBase64() string { |
|
result, err := m.Base64() |
|
if err != nil { |
|
panic(err.Error()) |
|
} |
|
return result |
|
} |
|
|
|
// SignedBase64 converts the contained object to a Base64 string |
|
// representation of the JSON string representation and signs it |
|
// using the provided key. |
|
func (m Map) SignedBase64(key string) (string, error) { |
|
|
|
base64, err := m.Base64() |
|
if err != nil { |
|
return "", err |
|
} |
|
|
|
sig := HashWithKey(base64, key) |
|
|
|
return base64 + SignatureSeparator + sig, nil |
|
|
|
} |
|
|
|
// MustSignedBase64 converts the contained object to a Base64 string |
|
// representation of the JSON string representation and signs it |
|
// using the provided key and panics if there is an error |
|
func (m Map) MustSignedBase64(key string) string { |
|
result, err := m.SignedBase64(key) |
|
if err != nil { |
|
panic(err.Error()) |
|
} |
|
return result |
|
} |
|
|
|
/* |
|
URL Query |
|
------------------------------------------------ |
|
*/ |
|
|
|
// URLValues creates a url.Values object from an Obj. This |
|
// function requires that the wrapped object be a map[string]interface{} |
|
func (m Map) URLValues() url.Values { |
|
|
|
vals := make(url.Values) |
|
|
|
for k, v := range m { |
|
//TODO: can this be done without sprintf? |
|
vals.Set(k, fmt.Sprintf("%v", v)) |
|
} |
|
|
|
return vals |
|
} |
|
|
|
// URLQuery gets an encoded URL query representing the given |
|
// Obj. This function requires that the wrapped object be a |
|
// map[string]interface{} |
|
func (m Map) URLQuery() (string, error) { |
|
return m.URLValues().Encode(), nil |
|
}
|
|
|