| package jws |
| |
| import ( |
| "encoding/json" |
| |
| "github.com/SermoDigital/jose" |
| ) |
| |
| // payload represents the payload of a JWS. |
| type payload struct { |
| v interface{} |
| u json.Unmarshaler |
| _ struct{} |
| } |
| |
| // MarshalJSON implements json.Marshaler for payload. |
| func (p *payload) MarshalJSON() ([]byte, error) { |
| b, err := json.Marshal(p.v) |
| if err != nil { |
| return nil, err |
| } |
| return jose.EncodeEscape(b), nil |
| } |
| |
| // Base64 implements jose.Encoder. |
| func (p *payload) Base64() ([]byte, error) { |
| b, err := json.Marshal(p.v) |
| if err != nil { |
| return nil, err |
| } |
| return jose.Base64Encode(b), nil |
| } |
| |
| // MarshalJSON implements json.Unmarshaler for payload. |
| func (p *payload) UnmarshalJSON(b []byte) error { |
| b2, err := jose.DecodeEscaped(b) |
| if err != nil { |
| return err |
| } |
| if p.u != nil { |
| err := p.u.UnmarshalJSON(b2) |
| p.v = p.u |
| return err |
| } |
| return json.Unmarshal(b2, &p.v) |
| } |
| |
| var ( |
| _ json.Marshaler = (*payload)(nil) |
| _ json.Unmarshaler = (*payload)(nil) |
| _ jose.Encoder = (*payload)(nil) |
| ) |