-
Notifications
You must be signed in to change notification settings - Fork 211
/
base64enc.go
51 lines (42 loc) · 881 Bytes
/
base64enc.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package types
import (
"encoding/base64"
"encoding/json"
)
type Base64Enc struct {
inner []byte
}
func (b *Base64Enc) UnmarshalJSON(data []byte) error {
return json.Unmarshal(data, &b.inner)
}
func (b Base64Enc) MarshalJSON() ([]byte, error) {
return json.Marshal(b.Bytes())
}
func (b *Base64Enc) UnmarshalText(text []byte) error {
v, err := base64.StdEncoding.DecodeString(string(text))
if err != nil {
return err
}
b.inner = v
return nil
}
func (b *Base64Enc) Bytes() []byte {
return b.inner
}
func NewBase64Enc(b []byte) Base64Enc {
return Base64Enc{inner: b}
}
func Base64FromString(s string) (Base64Enc, error) {
b := Base64Enc{}
if err := b.UnmarshalText([]byte(s)); err != nil {
return Base64Enc{}, err
}
return b, nil
}
func MustBase64FromString(s string) Base64Enc {
b, err := Base64FromString(s)
if err != nil {
panic(err)
}
return b
}