THRIFT-2159 Serializer/Deserializer for Go
Patch: Justin Judd
diff --git a/lib/go/thrift/serializer.go b/lib/go/thrift/serializer.go
new file mode 100644
index 0000000..bb6a2c8
--- /dev/null
+++ b/lib/go/thrift/serializer.go
@@ -0,0 +1,74 @@
+package thrift
+
+type TSerializer struct {
+ Transport TTransport
+ Protocol TProtocol
+}
+
+type TStruct interface {
+ Write(p TProtocol) error
+ Read(p TProtocol) error
+}
+
+func NewTSerializer() *TSerializer {
+ var transport TTransport
+ transport = NewTMemoryBufferLen(1024)
+
+ protocol := NewTBinaryProtocolFactoryDefault().GetProtocol(transport)
+
+ return &TSerializer{
+ transport,
+ protocol}
+}
+
+func (t *TSerializer) WriteString(msg TStruct) (s string, err error) {
+ s = ""
+ err = nil
+
+ if err = msg.Write(t.Protocol); err != nil {
+ return
+ }
+
+ if err = t.Protocol.Flush(); err != nil {
+ return
+ }
+ if err = t.Transport.Flush(); err != nil {
+ return
+ }
+
+ var buf []byte
+ var place int
+ buf = make([]byte, 1024)
+ if place, err = t.Transport.Read(buf); err != nil {
+ return
+ }
+
+ s = string(buf[:place])
+ return
+}
+
+func (t *TSerializer) Write(msg TStruct) (b []byte, err error) {
+ err = nil
+
+ if err = msg.Write(t.Protocol); err != nil {
+ return
+ }
+
+ if err = t.Protocol.Flush(); err != nil {
+ return
+ }
+
+ if err = t.Transport.Flush(); err != nil {
+ return
+ }
+
+ var buf []byte
+ var place int
+ buf = make([]byte, 1024)
+ if place, err = t.Transport.Read(buf); err != nil {
+ return
+ }
+
+ b = buf[:place]
+ return
+}