123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- package pio
- import (
- "encoding/json"
- "encoding/xml"
- "errors"
- )
- // Marshaler is the interface implemented by types that
- // can marshal themselves into valid output.
- type Marshaler interface {
- Marshal(v interface{}) ([]byte, error)
- }
- // Marshaled or (especially British, marshalled) is an interface which
- // is implemented by values that can marshal theirselves.
- //
- // It's like Marshaler but it doesn't takes an argument.
- type Marshaled interface {
- Marshal() ([]byte, error)
- }
- func fromMarshaled(self Marshaled) Marshaler {
- return MarshalerFunc(func(v interface{}) ([]byte, error) {
- return self.Marshal()
- })
- }
- // MarshalerFunc is the signature implemented by callers that
- // are responsible to marshal "v" into valid printable result.
- //
- // Look `Printer#Marshal` for more.
- type MarshalerFunc func(v interface{}) ([]byte, error)
- // Marshal makes the Marshaler compatible with the
- // standard golang's marshalers, so a marshaler
- // created for a Printer, can be used on std packages as well.
- func (m MarshalerFunc) Marshal(v interface{}) ([]byte, error) {
- return m(v)
- }
- // ErrMarshalNotResponsible retruns from a marshaler
- // when it's not responsible and should continue to the next marshaler.
- var ErrMarshalNotResponsible = errors.New("this marshaler is not responsible for this type of data")
- // ErrMarshalNotFound or ErrSkipped can be used to skip a specific
- // printer's output operation.
- var ErrMarshalNotFound = errors.New("no marshaler found for this type of dat")
- // Text is a Text marshaler, it converts
- // string to a compatible form of []byte.
- var Text = MarshalerFunc(func(v interface{}) ([]byte, error) {
- if b, ok := v.([]byte); ok {
- return b, nil
- }
- if s, ok := v.(string); ok {
- return []byte(s), nil // maybe 0101010 010110 here, but can be overridden by fmt.Sprintf("%s", v)
- }
- return nil, ErrMarshalNotResponsible
- })
- var (
- // JSON returns the JSON encoding of Printer#Print%v.
- // A shortcut for `encoding/json#Marshal`
- JSON = MarshalerFunc(json.Marshal)
- // JSONIndent returns the JSON encoding of Printer#Print%v.
- // A shortcut for `encoding/json#MarshalIndent(v, ""," ")`
- JSONIndent = MarshalerFunc(func(v interface{}) ([]byte, error) {
- return json.MarshalIndent(v, "", " ")
- })
- // XML returns the XML encoding of Printer#Print%v.
- // A shortcut for `encoding/xml#Marshal`
- XML = MarshalerFunc(xml.Marshal)
- // XMLIndent returns the XML encoding of Printer#Print%v.
- // A shortcut for `encoding/xml#MarshalIndent(v, ""," ")`
- XMLIndent = MarshalerFunc(func(v interface{}) ([]byte, error) {
- return xml.MarshalIndent(v, "", " ")
- })
- )
|