element(1, Data) =:= StructureName ->
write(Proto, {Module:struct_info(StructureName), Data});
+write(_, {{struct, {Module, StructureName}}, Data})
+ when is_atom(Module),
+ is_atom(StructureName) ->
+ error(struct_unmatched, {{provided, element(1, Data)},
+ {expected, StructureName}});
+
write(Proto0, {{list, Type}, Data})
when is_list(Data) ->
{Proto1, ok} = write(Proto0,
ALL_INCLUDEDIR=$(GEN_INCLUDEDIR) $(INCLUDEDIR) ../../lib/erl/include
INCLUDEFLAGS=$(patsubst %,-I%, ${ALL_INCLUDEDIR})
-MODULES = stress_server test_server test_client test_disklog test_membuffer
+MODULES = stress_server test_server test_client test_disklog test_membuffer test_thrift_1151
INCLUDES =
TARGETS = $(patsubst %,${TARGETDIR}/%.beam,${MODULES})
TEST_RPCFILE = ../ThriftTest.thrift
STRESS_RPCFILE = ../StressTest.thrift
+THRIFT_1151_FILE = src/Thrift1151.thrift
THRIFT = ../../compiler/cpp/thrift
${GENDIR}/: ${RPCFILE}
rm -rf ${GENDIR}
${THRIFT} --gen erl ${TEST_RPCFILE}
${THRIFT} --gen erl ${STRESS_RPCFILE}
+ ${THRIFT} --gen erl ${THRIFT_1151_FILE}
mkdir -p ${GEN_INCLUDEDIR}
mkdir -p ${GEN_SRCDIR}
mkdir -p ${GEN_TARGETDIR}
--- /dev/null
+struct StructA { 1: i16 x; }
+struct StructB { 1: i32 x; }
+struct StructC { 1: StructA x; }
--- /dev/null
+-module(test_thrift_1151).
+
+-include("thrift1151_types.hrl").
+
+-export([t/0, t1/0]).
+
+t() ->
+ S1 = #structC{x=#structB{x=1}},
+ {ok, Transport} = thrift_memory_buffer:new(),
+ {ok, Protocol} = thrift_binary_protocol:new(Transport),
+ thrift_protocol:write(Protocol,
+ {{struct, element(2, thrift1151_types:struct_info('structC'))}, S1}).
+
+t1() ->
+ S2 = #structC{x=#structA{x="1"}},
+ {ok, Transport} = thrift_memory_buffer:new(),
+ {ok, Protocol} = thrift_binary_protocol:new(Transport),
+ thrift_protocol:write(Protocol,
+ {{struct, element(2, thrift1151_types:struct_info('structC'))}, S2}).