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 }