// WriteValue writes the given Thrift value to the underlying stream using the // Thrift Binary Protocol. func (bw *Writer) WriteValue(v wire.Value) error { switch v.Type() { case wire.TBool: if v.GetBool() { return bw.writeByte(1) } return bw.writeByte(0) case wire.TI8: return bw.writeByte(byte(v.GetI8())) case wire.TDouble: value := math.Float64bits(v.GetDouble()) return bw.writeInt64(int64(value)) case wire.TI16: return bw.writeInt16(v.GetI16()) case wire.TI32: return bw.writeInt32(v.GetI32()) case wire.TI64: return bw.writeInt64(v.GetI64()) case wire.TBinary: b := v.GetBinary() if err := bw.writeInt32(int32(len(b))); err != nil { return err } return bw.write(b) case wire.TStruct: return bw.writeStruct(v.GetStruct()) case wire.TMap: return bw.writeMap(v.GetMap()) case wire.TSet: return bw.writeSet(v.GetSet()) case wire.TList: return bw.writeList(v.GetList()) default: return fmt.Errorf("unknown ttype %v", v.Type()) } }