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) )