github.com/batchcorp/thrift-iterator@v0.0.0-20220918180557-4c4a158fc6e9/api.go (about)

     1  package thrifter
     2  
     3  import (
     4  	"io"
     5  	"github.com/batchcorp/thrift-iterator/spi"
     6  	"github.com/batchcorp/thrift-iterator/general"
     7  )
     8  
     9  type Protocol int
    10  
    11  var ProtocolBinary Protocol = 1
    12  var ProtocolCompact Protocol = 2
    13  
    14  type Config struct {
    15  	Protocol      Protocol
    16  	StaticCodegen bool
    17  	Extensions    spi.Extensions
    18  }
    19  
    20  type API interface {
    21  	// NewStream is low level streaming api
    22  	NewStream(writer io.Writer, buf []byte) spi.Stream
    23  	// NewIterator is low level streaming api
    24  	NewIterator(reader io.Reader, buf []byte) spi.Iterator
    25  	// Unmarshal from []byte
    26  	Unmarshal(buf []byte, obj interface{}) error
    27  	// UnmarshalMessage from []byte
    28  	UnmarshalMessage(buf []byte) (general.Message, error)
    29  	// Marshal to []byte
    30  	Marshal(obj interface{}) ([]byte, error)
    31  	// ToJSON convert thrift message to JSON string
    32  	ToJSON(buf []byte) (string, error)
    33  	// MarshalMessage to []byte
    34  	MarshalMessage(msg general.Message) ([]byte, error)
    35  	// NewDecoder to unmarshal from []byte or io.Reader
    36  	NewDecoder(reader io.Reader, buf []byte) *Decoder
    37  	// NewEncoder to marshal to io.Writer
    38  	NewEncoder(writer io.Writer) *Encoder
    39  	// WillDecodeFromBuffer should only be used in generic.Declare
    40  	WillDecodeFromBuffer(sample ...interface{})
    41  	// WillDecodeFromReader should only be used in generic.Declare
    42  	WillDecodeFromReader(sample ...interface{})
    43  	// WillEncode should only be used in generic.Declare
    44  	WillEncode(sample ...interface{})
    45  }
    46  
    47  var DefaultConfig = Config{Protocol: ProtocolBinary, StaticCodegen: false}.Froze()
    48  
    49  func NewStream(writer io.Writer, buf []byte) spi.Stream {
    50  	return DefaultConfig.NewStream(writer, buf)
    51  }
    52  
    53  func NewIterator(reader io.Reader, buf []byte) spi.Iterator {
    54  	return DefaultConfig.NewIterator(reader, buf)
    55  }
    56  
    57  func Unmarshal(buf []byte, obj interface{}) error {
    58  	return DefaultConfig.Unmarshal(buf, obj)
    59  }
    60  
    61  // UnmarshalMessage demonstrate how to decode thrift binary without IDL into a general message struct
    62  func UnmarshalMessage(buf []byte) (general.Message, error) {
    63  	return DefaultConfig.UnmarshalMessage(buf)
    64  }
    65  
    66  // ToJSON convert the thrift message to JSON string
    67  func ToJSON(buf []byte) (string, error) {
    68  	return DefaultConfig.ToJSON(buf)
    69  }
    70  
    71  func Marshal(obj interface{}) ([]byte, error) {
    72  	return DefaultConfig.Marshal(obj)
    73  }
    74  
    75  // MarshalMessage is just a shortcut to demonstrate message decoded by UnmarshalMessage can be encoded back
    76  func MarshalMessage(msg general.Message) ([]byte, error) {
    77  	return DefaultConfig.MarshalMessage(msg)
    78  }
    79  
    80  func NewDecoder(reader io.Reader, buf []byte) *Decoder {
    81  	return DefaultConfig.NewDecoder(reader, buf)
    82  }
    83  
    84  func NewEncoder(writer io.Writer) *Encoder {
    85  	return DefaultConfig.NewEncoder(writer)
    86  }