1package jws 2 3import ( 4 "encoding/json" 5 6 "github.com/briankassouf/jose" 7) 8 9// payload represents the payload of a JWS. 10type payload struct { 11 v interface{} 12 u json.Unmarshaler 13 _ struct{} 14} 15 16// MarshalJSON implements json.Marshaler for payload. 17func (p *payload) MarshalJSON() ([]byte, error) { 18 b, err := json.Marshal(p.v) 19 if err != nil { 20 return nil, err 21 } 22 return jose.EncodeEscape(b), nil 23} 24 25// Base64 implements jose.Encoder. 26func (p *payload) Base64() ([]byte, error) { 27 b, err := json.Marshal(p.v) 28 if err != nil { 29 return nil, err 30 } 31 return jose.Base64Encode(b), nil 32} 33 34// MarshalJSON implements json.Unmarshaler for payload. 35func (p *payload) UnmarshalJSON(b []byte) error { 36 b2, err := jose.DecodeEscaped(b) 37 if err != nil { 38 return err 39 } 40 if p.u != nil { 41 err := p.u.UnmarshalJSON(b2) 42 p.v = p.u 43 return err 44 } 45 return json.Unmarshal(b2, &p.v) 46} 47 48var ( 49 _ json.Marshaler = (*payload)(nil) 50 _ json.Unmarshaler = (*payload)(nil) 51 _ jose.Encoder = (*payload)(nil) 52) 53