From 917d89825f1e4345b08c73a0159c4bd5a158a25c Mon Sep 17 00:00:00 2001 From: "Anthony F. Molinaro" Date: Tue, 21 Jun 2011 06:20:18 +0000 Subject: [PATCH] THRIFT-892 - refactor erlang library to build using rebar, move tests into lib/erl/test directory and run several via make check git-svn-id: https://svn.apache.org/repos/asf/thrift/trunk@1137870 13f79535-47bb-0310-9956-ffa450edef68 --- configure.ac | 2 +- lib/erl/Makefile.am | 46 +++++++++- lib/erl/rebar | Bin 0 -> 101083 bytes lib/erl/rebar.config | 3 + lib/erl/src/Makefile.am | 83 ----------------- .../src/{thrift.app.src => thrift.app.src.in} | 5 +- .../src => lib/erl/test}/Thrift1151.thrift | 0 .../src => lib/erl/test}/stress_server.erl | 0 .../erl/src => lib/erl/test}/test_client.erl | 0 lib/erl/test/test_disklog.erl | 85 ++++++++++++++++++ .../src => lib/erl/test}/test_membuffer.erl | 23 ++--- .../erl/src => lib/erl/test}/test_server.erl | 0 lib/erl/test/test_thrift_1151.erl | 24 +++++ test/Makefile.am | 1 - test/erl/Makefile | 68 -------------- test/erl/src/test_disklog.erl | 83 ----------------- test/erl/src/test_thrift_1151.erl | 19 ---- 17 files changed, 168 insertions(+), 274 deletions(-) create mode 100755 lib/erl/rebar create mode 100644 lib/erl/rebar.config delete mode 100644 lib/erl/src/Makefile.am rename lib/erl/src/{thrift.app.src => thrift.app.src.in} (97%) rename {test/erl/src => lib/erl/test}/Thrift1151.thrift (100%) rename {test/erl/src => lib/erl/test}/stress_server.erl (100%) rename {test/erl/src => lib/erl/test}/test_client.erl (100%) create mode 100644 lib/erl/test/test_disklog.erl rename {test/erl/src => lib/erl/test}/test_membuffer.erl (95%) rename {test/erl/src => lib/erl/test}/test_server.erl (100%) create mode 100644 lib/erl/test/test_thrift_1151.erl delete mode 100644 test/erl/Makefile delete mode 100644 test/erl/src/test_disklog.erl delete mode 100644 test/erl/src/test_thrift_1151.erl diff --git a/configure.ac b/configure.ac index f70ace26..48f93b5c 100644 --- a/configure.ac +++ b/configure.ac @@ -464,7 +464,7 @@ AC_CONFIG_FILES([ lib/c_glib/test/Makefile lib/csharp/Makefile lib/erl/Makefile - lib/erl/src/Makefile + lib/erl/src/thrift.app.src lib/hs/Makefile lib/java/Makefile lib/js/test/Makefile diff --git a/lib/erl/Makefile.am b/lib/erl/Makefile.am index 0722f121..fd780a2c 100644 --- a/lib/erl/Makefile.am +++ b/lib/erl/Makefile.am @@ -17,7 +17,23 @@ # under the License. # -SUBDIRS = src +THRIFT = ../../compiler/cpp/thrift +#THRIFT_FILES = ../../test/ThriftTest.thrift \ +# ../../test/Stress.thrift +THRIFT_FILES = $(wildcard ../../test/*.thrift) \ + $(wildcard test/*.thrift) + +.generated: $(THRIFT_FILES) + for f in $(THRIFT_FILES) ; do \ + $(THRIFT) --gen erl -out test $$f ; \ + done ; \ + touch .generated + +all: .generated + ./rebar compile + +check: .generated + ./rebar eunit install: all mkdir -p $(DESTDIR)$(ERLANG_INSTALL_LIB_DIR_thrift) ; \ @@ -31,10 +47,36 @@ install: all uninstall: rm -rf $(DESTDIR)$(ERLANG_INSTALL_LIB_DIR_thrift) +clean: + rm .generated + ./rebar clean maintainer-clean-local: + rm -f test/secondService_* \ + test/aService_* \ + test/serviceForExceptionWithAMap_* \ + test/annotationTest_* \ + test/service_* \ + test/constantsDemo_* \ + test/smallService_* \ + test/smallTest_* \ + test/debugProtoTest_* \ + test/srv_* \ + test/denseLinkingTest_* \ + test/stressTest_* \ + test/docTest_* \ + test/emptyService_* \ + test/inherited_* \ + test/javaBeansTest_* \ + test/thrift1151_* \ + test/javaBeansTest_* \ + test/manyTypedefs_* \ + test/thriftTest_* \ + test/optionalRequiredTest_* \ + test/yowza_* \ + test/reverseOrderService_* rm -rf ebin -EXTRA_DIST = include src +EXTRA_DIST = include src rebar rebar.config MAINTAINERCLEANFILES = Makefile.in diff --git a/lib/erl/rebar b/lib/erl/rebar new file mode 100755 index 0000000000000000000000000000000000000000..53419ea7091a78833b812668068f575489550f9b GIT binary patch literal 101083 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℘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 W30OLTfN%l+Bm*`Fpq@W=)Bg`TCYi7R literal 0 HcmV?d00001 diff --git a/lib/erl/rebar.config b/lib/erl/rebar.config new file mode 100644 index 00000000..7eb26b2c --- /dev/null +++ b/lib/erl/rebar.config @@ -0,0 +1,3 @@ +{erl_opts, [debug_info]}. +% {pre_hooks, [{compile, "./scripts/rebar-pre-compile"}, +% {clean, "./scripts/rebar-clean"}]}. diff --git a/lib/erl/src/Makefile.am b/lib/erl/src/Makefile.am deleted file mode 100644 index 9d6fcdb0..00000000 --- a/lib/erl/src/Makefile.am +++ /dev/null @@ -1,83 +0,0 @@ -# ---------------------------------------------------- -# Application version -# ---------------------------------------------------- - -APP_NAME=$(PACKAGE_NAME) -VSN=$(PACKAGE_VERSION) - -# ---------------------------------------------------- -# FLAGS -# ---------------------------------------------------- - -ERL_FLAGS = -ERL_INCLUDE = -I../include -ERL_BEHAV_PATH = -pz ../ebin -ERL_COMPILE_FLAGS = $(ERL_INCLUDE) $(ERL_BEHAV_PATH) - -EBIN ?= ../ebin -ESRC ?= . -EMULATOR = beam - -ERLC_WFLAGS = -W -ERLC = erlc $(ERLC_WFLAGS) $(ERLC_FLAGS) -ERL = erl -boot start_clean - -$(EBIN)/%.beam: $(ESRC)/%.erl - @echo " ERLC $<" - @$(ERLC) $(ERL_FLAGS) $(ERL_COMPILE_FLAGS) -o$(EBIN) $< - -.erl.beam: - $(ERLC) $(ERL_FLAGS) $(ERL_COMPILE_FLAGS) -o$(dir $@) $< - -# ---------------------------------------------------- -# Target Specs -# ---------------------------------------------------- - -MODULES = $(shell find . -name \*.erl | sed 's:^\./::' | sed 's/\.erl//') -MODULES_STRING_LIST = $(shell find . -name \*.erl | sed 's:^\./::' | sed 's/\.erl/,/') -BEHAV_MODULES = $(shell find . -name \*.erl | xargs grep -l behaviour_info | sed 's:^\./::' | sed 's/\.erl//') - -ERL_FILES= $(MODULES:%=%.erl) -DOC_FILES=$(ERL_FILES) - -APP_FILE= $(APP_NAME).app -APP_SRC= $(APP_FILE).src -APP_TARGET= $(EBIN)/$(APP_FILE) - -BEAMS= $(MODULES:%=$(EBIN)/%.$(EMULATOR)) -BEHAV_BEAMS= $(BEHAV_MODULES:%=$(EBIN)/%.$(EMULATOR)) -TARGET_FILES= $(BEHAV_BEAMS) $(BEAMS) $(APP_TARGET) $(APPUP_TARGET) - -# ---------------------------------------------------- -# Targets -# ---------------------------------------------------- - -all debug opt: $(EBIN) $(TARGET_FILES) - -# Note: In the open-source build clean must not destroy the preloaded -# beam files. -clean: - rm -f $(TARGET_FILES) - rm -f *~ - rm -f core - rm -rf $(EBIN) - rm -rf *html - -$(EBIN): - mkdir $(EBIN) - -dialyzer: $(TARGET_FILES) - dialyzer --src -r . $(ERL_INCLUDE) - -# ---------------------------------------------------- -# Special Build Targets -# ---------------------------------------------------- - -$(APP_TARGET): $(APP_SRC) $(BEAMS) - sed -e 's;%VSN%;$(VSN);' \ - -e 's;%APP_NAME%;$(APP_NAME);' \ - -e 's;%MODULES%;%MODULES%$(MODULES_STRING_LIST);' \ - $< > $<".tmp" - sed -e 's/%MODULES%\(.*\),/\1/' \ - $<".tmp" > $@ - rm $<".tmp" diff --git a/lib/erl/src/thrift.app.src b/lib/erl/src/thrift.app.src.in similarity index 97% rename from lib/erl/src/thrift.app.src rename to lib/erl/src/thrift.app.src.in index ebe38d31..176c4c1c 100644 --- a/lib/erl/src/thrift.app.src +++ b/lib/erl/src/thrift.app.src.in @@ -17,17 +17,16 @@ %% under the License. %% %%% -*- mode:erlang -*- -{application, %APP_NAME%, +{application, @PACKAGE_NAME@, [ % A quick description of the application. {description, "Thrift bindings"}, % The version of the applicaton - {vsn, "%VSN%"}, + {vsn, "@PACKAGE_VERSION@"}, % All modules used by the application. {modules, [ - %MODULES% ]}, % All of the registered names the application uses. This can be ignored. diff --git a/test/erl/src/Thrift1151.thrift b/lib/erl/test/Thrift1151.thrift similarity index 100% rename from test/erl/src/Thrift1151.thrift rename to lib/erl/test/Thrift1151.thrift diff --git a/test/erl/src/stress_server.erl b/lib/erl/test/stress_server.erl similarity index 100% rename from test/erl/src/stress_server.erl rename to lib/erl/test/stress_server.erl diff --git a/test/erl/src/test_client.erl b/lib/erl/test/test_client.erl similarity index 100% rename from test/erl/src/test_client.erl rename to lib/erl/test/test_client.erl diff --git a/lib/erl/test/test_disklog.erl b/lib/erl/test/test_disklog.erl new file mode 100644 index 00000000..17a27b04 --- /dev/null +++ b/lib/erl/test/test_disklog.erl @@ -0,0 +1,85 @@ +%% +%% Licensed to the Apache Software Foundation (ASF) under one +%% or more contributor license agreements. See the NOTICE file +%% distributed with this work for additional information +%% regarding copyright ownership. The ASF licenses this file +%% to you under the Apache License, Version 2.0 (the +%% "License"); you may not use this file except in compliance +%% with the License. You may obtain a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, +%% software distributed under the License is distributed on an +%% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +%% KIND, either express or implied. See the License for the +%% specific language governing permissions and limitations +%% under the License. +%% + +-module(test_disklog). + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). + +disklog_test() -> + {ok, TransportFactory} = + thrift_disk_log_transport:new_transport_factory( + test_disklog, + [{file, "/tmp/test_log"}, + {size, {1024*1024, 10}}]), + {ok, ProtocolFactory} = + thrift_binary_protocol:new_protocol_factory( TransportFactory, []), + {ok, Proto} = ProtocolFactory(), + {ok, Client0} = thrift_client:new(Proto, thriftTest_thrift), + + io:format("Client started~n"), + + % We have to make oneway calls into this client only since otherwise it + % will try to read from the disklog and go boom. + {Client1, {ok, ok}} = thrift_client:call(Client0, testOneway, [16#deadbeef]), + io:format("Call written~n"), + + % Use the send_call method to write a non-oneway call into the log + {Client2, ok} = + thrift_client:send_call(Client1, testString, [<<"hello world">>]), + io:format("Non-oneway call sent~n"), + + {_Client3, ok} = thrift_client:close(Client2), + io:format("Client closed~n"), + + ok. + +disklog_base64_test() -> + {ok, TransportFactory} = + thrift_disk_log_transport:new_transport_factory( + test_disklog, + [{file, "/tmp/test_b64_log"}, + {size, {1024*1024, 10}}]), + {ok, B64Factory} = + thrift_base64_transport:new_transport_factory(TransportFactory), + {ok, BufFactory} = + thrift_buffered_transport:new_transport_factory(B64Factory), + {ok, ProtocolFactory} = + thrift_binary_protocol:new_protocol_factory(BufFactory, []), + {ok, Proto} = ProtocolFactory(), + {ok, Client0} = thrift_client:new(Proto, thriftTest_thrift), + + io:format("Client started~n"), + + % We have to make oneway calls into this client only since otherwise + % it will try to read from the disklog and go boom. + {Client1, {ok, ok}} = thrift_client:call(Client0, testOneway, [16#deadbeef]), + io:format("Call written~n"), + + % Use the send_call method to write a non-oneway call into the log + {Client2, ok} = + thrift_client:send_call(Client1, testString, [<<"hello world">>]), + io:format("Non-oneway call sent~n"), + + {_Client3, ok} = thrift_client:close(Client2), + io:format("Client closed~n"), + + ok. + +-endif. diff --git a/test/erl/src/test_membuffer.erl b/lib/erl/test/test_membuffer.erl similarity index 95% rename from test/erl/src/test_membuffer.erl rename to lib/erl/test/test_membuffer.erl index fcf993a1..7a011435 100644 --- a/test/erl/src/test_membuffer.erl +++ b/lib/erl/test/test_membuffer.erl @@ -18,7 +18,9 @@ %% -module(test_membuffer). --export([t/0]). + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). -include("thriftTest_types.hrl"). @@ -30,7 +32,7 @@ test_data() -> i64_thing = 12345678900 }. -t1() -> +encode_decode_1_test() -> {ok, Transport} = thrift_memory_buffer:new(), {ok, Protocol0} = thrift_binary_protocol:new(Transport), TestData = test_data(), @@ -42,8 +44,7 @@ t1() -> 'xtruct'), Result = TestData. - -t2() -> +encode_decode_2_test() -> {ok, Transport} = thrift_memory_buffer:new(), {ok, Protocol0} = thrift_binary_protocol:new(Transport), TestData = test_data(), @@ -60,7 +61,7 @@ t2() -> i64_thing = TestData#xtruct.i64_thing}. -t3() -> +encode_decode_3_test() -> {ok, Transport} = thrift_memory_buffer:new(), {ok, Protocol0} = thrift_binary_protocol:new(Transport), TestData = #bools{im_true = true, im_false = false}, @@ -75,7 +76,7 @@ t3() -> true = TestData#bools.im_false =:= Result#bools.im_false. -t4() -> +encode_decode_4_test() -> {ok, Transport} = thrift_memory_buffer:new(), {ok, Protocol0} = thrift_binary_protocol:new(Transport), TestData = #insanity{xtructs=[]}, @@ -88,7 +89,7 @@ t4() -> TestData = Result. -t5() -> +encode_decode_5_test() -> % test writing to a buffer, getting the bytes out, putting them % in a new buffer and reading them @@ -111,10 +112,4 @@ t5() -> Result = TestData. -t() -> - t1(), - t2(), - t3(), - t4(), - t5(). - +-endif. diff --git a/test/erl/src/test_server.erl b/lib/erl/test/test_server.erl similarity index 100% rename from test/erl/src/test_server.erl rename to lib/erl/test/test_server.erl diff --git a/lib/erl/test/test_thrift_1151.erl b/lib/erl/test/test_thrift_1151.erl new file mode 100644 index 00000000..9cee4861 --- /dev/null +++ b/lib/erl/test/test_thrift_1151.erl @@ -0,0 +1,24 @@ +-module(test_thrift_1151). + +-include("thrift1151_types.hrl"). + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). + +unmatched_struct_test() -> + S1 = #structC{x=#structB{x=1}}, + {ok, Transport} = thrift_memory_buffer:new(), + {ok, Protocol} = thrift_binary_protocol:new(Transport), + ?assertException (error, struct_unmatched, + thrift_protocol:write(Protocol, + {{struct, element(2, thrift1151_types:struct_info('structC'))}, S1})). + +badarg_test() -> + S2 = #structC{x=#structA{x="1"}}, + {ok, Transport} = thrift_memory_buffer:new(), + {ok, Protocol} = thrift_binary_protocol:new(Transport), + ?assertException (error, badarg, + thrift_protocol:write(Protocol, + {{struct, element(2, thrift1151_types:struct_info('structC'))}, S2})). + +-endif. diff --git a/test/Makefile.am b/test/Makefile.am index 39ea85ab..ae114040 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -41,7 +41,6 @@ EXTRA_DIST = \ rb \ perl \ php \ - erl \ hs \ ocaml \ AnnotationTest.thrift \ diff --git a/test/erl/Makefile b/test/erl/Makefile deleted file mode 100644 index bfb1d005..00000000 --- a/test/erl/Makefile +++ /dev/null @@ -1,68 +0,0 @@ -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# - -GENDIR=gen -GEN_INCLUDEDIR=$(GENDIR)/include -GEN_SRCDIR=$(GENDIR)/src -GEN_TARGETDIR=$(GENDIR)/ebin - -INCLUDEDIR=include -TARGETDIR=ebin -SRCDIR=src - -ALL_INCLUDEDIR=$(GEN_INCLUDEDIR) $(INCLUDEDIR) ../../lib/erl/include -INCLUDEFLAGS=$(patsubst %,-I%, ${ALL_INCLUDEDIR}) - -MODULES = stress_server test_server test_client test_disklog test_membuffer test_thrift_1151 - -INCLUDES = -TARGETS = $(patsubst %,${TARGETDIR}/%.beam,${MODULES}) -HEADERS = $(patsubst %,${INCLUDEDIR}/%.hrl,${INCLUDES}) - -all: ${GEN_TARGETDIR}/ ${TARGETS} - -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} - mv gen-erl/*.hrl ${GEN_INCLUDEDIR} - mv gen-erl/*.erl ${GEN_SRCDIR} - rm -rf gen-erl - -${GEN_TARGETDIR}/: ${GENDIR}/ - rm -rf ${GEN_TARGETDIR} - mkdir -p ${GEN_TARGETDIR} - erlc ${ERLC_FLAGS} ${INCLUDEFLAGS} -o ${GEN_TARGETDIR} ${GEN_SRCDIR}/*.erl - -$(TARGETS): ${TARGETDIR}/%.beam: ${SRCDIR}/%.erl ${GEN_INCLUDEDIR}/ ${HEADERS} - mkdir -p ${TARGETDIR} - erlc ${ERLC_FLAGS} ${INCLUDEFLAGS} -o ${TARGETDIR} $< - -clean: - rm -f ${TARGETDIR}/*.beam - rm -rf ${GENDIR} diff --git a/test/erl/src/test_disklog.erl b/test/erl/src/test_disklog.erl deleted file mode 100644 index fc0dcf86..00000000 --- a/test/erl/src/test_disklog.erl +++ /dev/null @@ -1,83 +0,0 @@ -%% -%% Licensed to the Apache Software Foundation (ASF) under one -%% or more contributor license agreements. See the NOTICE file -%% distributed with this work for additional information -%% regarding copyright ownership. The ASF licenses this file -%% to you under the Apache License, Version 2.0 (the -%% "License"); you may not use this file except in compliance -%% with the License. You may obtain a copy of the License at -%% -%% http://www.apache.org/licenses/LICENSE-2.0 -%% -%% Unless required by applicable law or agreed to in writing, -%% software distributed under the License is distributed on an -%% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -%% KIND, either express or implied. See the License for the -%% specific language governing permissions and limitations -%% under the License. -%% - --module(test_disklog). - --compile(export_all). - -t() -> - {ok, TransportFactory} = - thrift_disk_log_transport:new_transport_factory( - test_disklog, - [{file, "/tmp/test_log"}, - {size, {1024*1024, 10}}]), - {ok, ProtocolFactory} = thrift_binary_protocol:new_protocol_factory( - TransportFactory, []), - {ok, Proto} = ProtocolFactory(), - {ok, Client0} = thrift_client:new(Proto, thriftTest_thrift), - - io:format("Client started~n"), - - % We have to make oneway calls into this client only since otherwise it will try - % to read from the disklog and go boom. - {Client1, {ok, ok}} = thrift_client:call(Client0, testOneway, [16#deadbeef]), - io:format("Call written~n"), - - % Use the send_call method to write a non-oneway call into the log - {Client2, ok} = thrift_client:send_call(Client1, testString, [<<"hello world">>]), - io:format("Non-oneway call sent~n"), - - {_Client3, ok} = thrift_client:close(Client2), - io:format("Client closed~n"), - - ok. - - - -t_base64() -> - {ok, TransportFactory} = - thrift_disk_log_transport:new_transport_factory( - test_disklog, - [{file, "/tmp/test_b64_log"}, - {size, {1024*1024, 10}}]), - {ok, B64Factory} = - thrift_base64_transport:new_transport_factory(TransportFactory), - {ok, BufFactory} = - thrift_buffered_transport:new_transport_factory(B64Factory), - {ok, ProtocolFactory} = thrift_binary_protocol:new_protocol_factory( - BufFactory, []), - {ok, Proto} = ProtocolFactory(), - {ok, Client0} = thrift_client:new(Proto, thriftTest_thrift), - - io:format("Client started~n"), - - % We have to make oneway calls into this client only since otherwise it will try - % to read from the disklog and go boom. - {Client1, {ok, ok}} = thrift_client:call(Client0, testOneway, [16#deadbeef]), - io:format("Call written~n"), - - % Use the send_call method to write a non-oneway call into the log - {Client2, ok} = thrift_client:send_call(Client1, testString, [<<"hello world">>]), - io:format("Non-oneway call sent~n"), - - {_Client3, ok} = thrift_client:close(Client2), - io:format("Client closed~n"), - - ok. - diff --git a/test/erl/src/test_thrift_1151.erl b/test/erl/src/test_thrift_1151.erl deleted file mode 100644 index c50ddee7..00000000 --- a/test/erl/src/test_thrift_1151.erl +++ /dev/null @@ -1,19 +0,0 @@ --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}). -- 2.17.1