summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorguanjialin <1406147701@qq.com>2020-09-03 16:31:18 +0800
committerJens Geyer <jensg@apache.org>2020-10-01 23:11:11 +0200
commit1d68bfe3c4b72370e3db50f164c5241f15fc119c (patch)
tree4e8200f976e1b1fda6b6bfb003a167712452dbce
parent44b0b5d3c9b2bcaae43470bfe98721d0281958e5 (diff)
downloadthrift-1d68bfe3c4b72370e3db50f164c5241f15fc119c.tar.gz
Rust compiler generates invalid code when using typedef with union
Client: rs Patch: guanjialin <1406147701@qq.com> This closes #2228
-rw-r--r--compiler/cpp/src/thrift/generate/t_rs_generator.cc4
1 files changed, 4 insertions, 0 deletions
diff --git a/compiler/cpp/src/thrift/generate/t_rs_generator.cc b/compiler/cpp/src/thrift/generate/t_rs_generator.cc
index 4384dfef5..506e0901f 100644
--- a/compiler/cpp/src/thrift/generate/t_rs_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_rs_generator.cc
@@ -1454,6 +1454,10 @@ void t_rs_generator::render_union_sync_write(const string &union_name, t_struct
t_field* member = (*members_iter);
t_field::e_req member_req = t_field::T_REQUIRED;
t_type* ttype = member->get_type();
+ if (ttype->is_typedef()) {
+ // get the actual type of typedef
+ ttype = ((t_typedef*)ttype)->get_type();
+ }
string match_var((ttype->is_base_type() && !ttype->is_string()) ? "f" : "ref f");
f_gen_
<< indent()