1 %%% Copyright (c) 2007- Facebook
2 %%% Distributed under the Thrift Software License
4 %%% See accompanying file LICENSE or visit the Thrift site at:
5 %%% http://developers.facebook.com/thrift/
7 -module(tBinaryProtocol
).
11 -include("thrift.hrl").
12 -include("protocol/tProtocolException.hrl").
13 -include("protocol/tBinaryProtocol.hrl").
17 -export([attr
/4, super
/0, inspect
/1]).
23 writeFieldBegin
/4, writeFieldStop
/1,
28 writeBool
/2, writeByte
/2, writeI16
/2, writeI32
/2,
29 writeI64
/2, writeDouble
/2, writeString
/2,
37 readBool
/1, readByte
/1, readI16
/1, readI32
/1,
38 readI64
/1, readDouble
/1, readString
/1
43 %%% 'super' is required unless ?MODULE is a base class
49 %%% behavior callbacks
52 %%% super() -> SuperModule = atom()
58 %%% inspect(This) -> string()
68 Super
= (super()):new(Trans
),
69 #?MODULE
{super
=Super
}.
75 writeMessageBegin(This
, Name
, Type
, Seqid
) ->
76 ?
L1(writeI32
, ?VERSION_1 bor Type
),
77 ?
L1(writeString
, Name
),
81 writeFieldBegin(This
, _Name
, Type
, Id
) ->
86 writeFieldStop(This
) ->
87 ?
L1(writeByte
, ?tType_STOP
),
90 writeMapBegin(This
, Ktype
, Vtype
, Size
) ->
91 ?
L1(writeByte
, Ktype
),
92 ?
L1(writeByte
, Vtype
),
96 writeListBegin(This
, Etype
, Size
) ->
97 ?
L1(writeByte
, Etype
),
101 writeSetBegin(This
, Etype
, Size
) ->
102 ?
L1(writeByte
, Etype
),
108 writeBool(This
, Bool
) ->
110 true
-> ?
L1(writeByte
, 1);
111 false
-> ?
L1(writeByte
, 0)
114 writeByte(This
, Byte
) ->
115 Trans
= oop:get(This
, trans
),
116 ?
R1(Trans
, effectful_write
, binary_to_list(<<Byte:8/big
>>)).
118 writeI16(This
, I16
) ->
119 Trans
= oop:get(This
, trans
),
120 ?
R1(Trans
, effectful_write
, binary_to_list(<<I16:16/big
>>)).
122 writeI32(This
, I32
) ->
123 Trans
= oop:get(This
, trans
),
124 ?
R1(Trans
, effectful_write
, binary_to_list(<<I32:32/big
>>)).
126 writeI64(This
, I64
) ->
127 Trans
= oop:get(This
, trans
),
128 ?
R1(Trans
, effectful_write
, binary_to_list(<<I64:64/big
>>)).
130 writeDouble(This
, Double
) ->
131 Trans
= oop:get(This
, trans
),
132 ?
R1(Trans
, effectful_write
, binary_to_list(<<Double:64/big
>>)).
134 writeString(This
, Str
) ->
135 Trans
= oop:get(This
, trans
),
136 ?
L1(writeI32
, length(Str
)),
137 ?
R1(Trans
, effectful_write
, Str
).
141 readMessageBegin(This
) ->
142 Version
= ?
L0(readI32
),
144 (Version band ?VERSION_MASK
) /= ?VERSION_1
->
145 throw(tProtocolException:new(?tProtocolException_BAD_VERSION
,
146 "Missing version identifier"));
149 Type
= Version band
16#
000000ff
,
150 Name
= ?
L0(readString
),
151 Seqid
= ?
L0(readI32
),
152 { Name
, Type
, Seqid
}.
154 readFieldBegin(This
) ->
155 Type
= ?
L0(readByte
),
158 { nil
, Type
, 0 }; % WATCH
164 readMapBegin(This
) ->
165 Ktype
= ?
L0(readByte
),
166 Vtype
= ?
L0(readByte
),
168 { Ktype
, Vtype
, Size
}.
170 readListBegin(This
) ->
171 Etype
= ?
L0(readByte
),
175 readSetBegin(This
) ->
176 Etype
= ?
L0(readByte
),
183 Byte
= ?
L0(readByte
),
187 Trans
= oop:get(This
, trans
),
188 <<Val:8/integer-signed
-big
, _
/binary>> = ?
R1(Trans
, readAll
, 1),
192 Trans
= oop:get(This
, trans
),
193 <<Val:16/integer-signed
-big
, _
/binary>> = ?
R1(Trans
, readAll
, 2),
197 Trans
= oop:get(This
, trans
),
198 <<Val:32/integer-signed
-big
, _
/binary>> = ?
R1(Trans
, readAll
, 4),
202 Trans
= oop:get(This
, trans
),
203 <<Val:64/integer-signed
-big
, _
/binary>> = ?
R1(Trans
, readAll
, 8),
207 Trans
= oop:get(This
, trans
),
208 <<Val:64/float-signed
-big
, _
/binary>> = ?
R1(Trans
, readAll
, 8),
212 Trans
= oop:get(This
, trans
),
214 binary_to_list(?
R1(Trans
, readAll
, Sz
)).