Skip to content

Commit f0d4eb6

Browse files
authored
Use r# syntax for keywords instead of appending _ (#153)
This is more faithful to the input and guarantees that there can't be a collision. Also included is a fix for reflection since the munged names shouldn't be used at runtime. This also adds a couple missing keywords from Rust 2018.
1 parent aa75014 commit f0d4eb6

10 files changed

Lines changed: 565 additions & 135 deletions

File tree

pb-jelly-gen/codegen/codegen.py

Lines changed: 103 additions & 75 deletions
Large diffs are not rendered by default.

pb-test/gen/pb-jelly/proto_pbtest/src/lib.rs.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
extern crate lazy_static;
2626

2727
pub mod bench;
28+
pub mod r#mod;
2829
pub mod pbtest2;
2930
pub mod pbtest3;
3031
pub mod servicepb;
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
// @generated, do not edit
2+
3+
pub mod r#struct;
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
// @generated, do not edit
2+
#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
3+
pub struct Message {
4+
}
5+
impl ::std::default::Default for Message {
6+
fn default() -> Self {
7+
Message {
8+
}
9+
}
10+
}
11+
lazy_static! {
12+
pub static ref Message_default: Message = Message::default();
13+
}
14+
impl ::pb_jelly::Message for Message {
15+
fn descriptor(&self) -> ::std::option::Option<::pb_jelly::MessageDescriptor> {
16+
Some(::pb_jelly::MessageDescriptor {
17+
name: "Message",
18+
full_name: "pbtest.mod.Message",
19+
fields: &[
20+
],
21+
oneofs: &[
22+
],
23+
})
24+
}
25+
fn compute_size(&self) -> usize {
26+
0
27+
}
28+
fn compute_grpc_slices_size(&self) -> usize {
29+
0
30+
}
31+
fn serialize<W: ::pb_jelly::PbBufferWriter>(&self, w: &mut W) -> ::std::io::Result<()> {
32+
Ok(())
33+
}
34+
fn deserialize<B: ::pb_jelly::PbBufferReader>(&mut self, mut buf: &mut B) -> ::std::io::Result<()> {
35+
while let Some((field_number, typ)) = ::pb_jelly::wire_format::read(&mut buf)? {
36+
match field_number {
37+
_ => {
38+
::pb_jelly::skip(typ, &mut buf)?;
39+
}
40+
}
41+
}
42+
Ok(())
43+
}
44+
}
45+
impl ::pb_jelly::Reflection for Message {
46+
fn which_one_of(&self, oneof_name: &str) -> ::std::option::Option<&'static str> {
47+
match oneof_name {
48+
_ => {
49+
panic!("unknown oneof name given");
50+
}
51+
}
52+
}
53+
fn get_field_mut(&mut self, field_name: &str) -> ::pb_jelly::reflection::FieldMut<'_> {
54+
match field_name {
55+
_ => {
56+
panic!("unknown field name given")
57+
}
58+
}
59+
}
60+
}
61+

pb-test/gen/pb-jelly/proto_pbtest/src/pbtest2.rs.expected

Lines changed: 56 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -2685,15 +2685,15 @@ pub struct TestMessage {
26852685
pub optional_foreign_message_boxed: ::std::option::Option<::std::boxed::Box<ForeignMessage>>,
26862686
pub optional_foreign_message_nonnullable: ForeignMessage,
26872687
/// Use some rust reserved keywords
2688-
pub type_: ::std::option::Option<bool>,
2688+
pub r#type: ::std::option::Option<bool>,
26892689
pub oneof_int: ::std::option::Option<TestMessage_OneofInt>,
26902690
pub oneof_foreign: ::std::option::Option<TestMessage_OneofForeign>,
26912691
pub oneof_zero: ::std::option::Option<TestMessage_OneofZero>,
26922692
pub oneof_null: ::std::option::Option<TestMessage_OneofNull>,
26932693
pub oneof_unset: ::std::option::Option<TestMessage_OneofUnset>,
26942694
pub oneof_primitives: ::std::option::Option<TestMessage_OneofPrimitives>,
26952695
pub oneof_empty_field: TestMessage_OneofEmptyField,
2696-
pub mod_: ::std::option::Option<TestMessage_Mod>,
2696+
pub r#mod: ::std::option::Option<TestMessage_Mod>,
26972697
}
26982698
#[derive(Clone, Debug, PartialEq)]
26992699
pub enum TestMessage_OneofInt {
@@ -3094,14 +3094,14 @@ impl TestMessage {
30943094
pub fn get_optional_foreign_message_boxed(&self) -> &ForeignMessage {
30953095
self.optional_foreign_message_boxed.as_ref().map(::std::ops::Deref::deref).unwrap_or(&ForeignMessage_default)
30963096
}
3097-
pub fn has_type_(&self) -> bool {
3098-
self.type_.is_some()
3097+
pub fn has_type(&self) -> bool {
3098+
self.r#type.is_some()
30993099
}
3100-
pub fn set_type_(&mut self, v: bool) {
3101-
self.type_ = Some(v);
3100+
pub fn set_type(&mut self, v: bool) {
3101+
self.r#type = Some(v);
31023102
}
3103-
pub fn get_type_(&self) -> bool {
3104-
self.type_.unwrap_or(false)
3103+
pub fn get_type(&self) -> bool {
3104+
self.r#type.unwrap_or(false)
31053105
}
31063106
}
31073107
impl ::std::default::Default for TestMessage {
@@ -3141,15 +3141,15 @@ impl ::std::default::Default for TestMessage {
31413141
repeated_foreign_enum: ::std::default::Default::default(),
31423142
optional_foreign_message_boxed: ::std::default::Default::default(),
31433143
optional_foreign_message_nonnullable: ::std::default::Default::default(),
3144-
type_: ::std::default::Default::default(),
3144+
r#type: ::std::default::Default::default(),
31453145
oneof_int: None,
31463146
oneof_foreign: None,
31473147
oneof_zero: None,
31483148
oneof_null: None,
31493149
oneof_unset: None,
31503150
oneof_primitives: None,
31513151
oneof_empty_field: TestMessage_OneofEmptyField::A,
3152-
mod_: None,
3152+
r#mod: None,
31533153
}
31543154
}
31553155
}
@@ -3604,26 +3604,26 @@ impl ::pb_jelly::Message for TestMessage {
36043604
oneof_index: Some(6),
36053605
},
36063606
::pb_jelly::FieldDescriptor {
3607-
name: "type_",
3608-
full_name: "pbtest.TestMessage.type_",
3607+
name: "type",
3608+
full_name: "pbtest.TestMessage.type",
36093609
index: 49,
36103610
number: 73,
36113611
typ: ::pb_jelly::wire_format::Type::Varint,
36123612
label: ::pb_jelly::Label::Optional,
36133613
oneof_index: None,
36143614
},
36153615
::pb_jelly::FieldDescriptor {
3616-
name: "loop_",
3617-
full_name: "pbtest.TestMessage.loop_",
3616+
name: "loop",
3617+
full_name: "pbtest.TestMessage.loop",
36183618
index: 50,
36193619
number: 74,
36203620
typ: ::pb_jelly::wire_format::Type::Varint,
36213621
label: ::pb_jelly::Label::Optional,
36223622
oneof_index: Some(7),
36233623
},
36243624
::pb_jelly::FieldDescriptor {
3625-
name: "unsafe_",
3626-
full_name: "pbtest.TestMessage.unsafe_",
3625+
name: "unsafe",
3626+
full_name: "pbtest.TestMessage.unsafe",
36273627
index: 51,
36283628
number: 75,
36293629
typ: ::pb_jelly::wire_format::Type::Varint,
@@ -3654,7 +3654,7 @@ impl ::pb_jelly::Message for TestMessage {
36543654
name: "oneof_empty_field",
36553655
},
36563656
::pb_jelly::OneofDescriptor {
3657-
name: "mod_",
3657+
name: "mod",
36583658
},
36593659
],
36603660
})
@@ -4023,27 +4023,27 @@ impl ::pb_jelly::Message for TestMessage {
40234023
c_size += l;
40244024
}
40254025
size += c_size;
4026-
let mut type__size = 0;
4027-
for val in &self.type_ {
4026+
let mut type_size = 0;
4027+
for val in &self.r#type {
40284028
let l = ::pb_jelly::Message::compute_size(val);
4029-
type__size += ::pb_jelly::wire_format::serialized_length(73);
4030-
type__size += l;
4029+
type_size += ::pb_jelly::wire_format::serialized_length(73);
4030+
type_size += l;
40314031
}
4032-
size += type__size;
4033-
let mut loop__size = 0;
4034-
if let Some(TestMessage_Mod::Loop(ref val)) = self.mod_ {
4032+
size += type_size;
4033+
let mut loop_size = 0;
4034+
if let Some(TestMessage_Mod::Loop(ref val)) = self.r#mod {
40354035
let l = ::pb_jelly::Message::compute_size(val);
4036-
loop__size += ::pb_jelly::wire_format::serialized_length(74);
4037-
loop__size += l;
4036+
loop_size += ::pb_jelly::wire_format::serialized_length(74);
4037+
loop_size += l;
40384038
}
4039-
size += loop__size;
4040-
let mut unsafe__size = 0;
4041-
if let Some(TestMessage_Mod::Unsafe(ref val)) = self.mod_ {
4039+
size += loop_size;
4040+
let mut unsafe_size = 0;
4041+
if let Some(TestMessage_Mod::Unsafe(ref val)) = self.r#mod {
40424042
let l = ::pb_jelly::Message::compute_size(val);
4043-
unsafe__size += ::pb_jelly::wire_format::serialized_length(75);
4044-
unsafe__size += l;
4043+
unsafe_size += ::pb_jelly::wire_format::serialized_length(75);
4044+
unsafe_size += l;
40454045
}
4046-
size += unsafe__size;
4046+
size += unsafe_size;
40474047
size
40484048
}
40494049
fn compute_grpc_slices_size(&self) -> usize {
@@ -4199,13 +4199,13 @@ impl ::pb_jelly::Message for TestMessage {
41994199
if let TestMessage_OneofEmptyField::C(ref val) = self.oneof_empty_field {
42004200
size += ::pb_jelly::Message::compute_grpc_slices_size(val);
42014201
}
4202-
for val in &self.type_ {
4202+
for val in &self.r#type {
42034203
size += ::pb_jelly::Message::compute_grpc_slices_size(val);
42044204
}
4205-
if let Some(TestMessage_Mod::Loop(ref val)) = self.mod_ {
4205+
if let Some(TestMessage_Mod::Loop(ref val)) = self.r#mod {
42064206
size += ::pb_jelly::Message::compute_grpc_slices_size(val);
42074207
}
4208-
if let Some(TestMessage_Mod::Unsafe(ref val)) = self.mod_ {
4208+
if let Some(TestMessage_Mod::Unsafe(ref val)) = self.r#mod {
42094209
size += ::pb_jelly::Message::compute_grpc_slices_size(val);
42104210
}
42114211
size
@@ -4441,15 +4441,15 @@ impl ::pb_jelly::Message for TestMessage {
44414441
::pb_jelly::wire_format::write(72, ::pb_jelly::wire_format::Type::Varint, w)?;
44424442
::pb_jelly::Message::serialize(val, w)?;
44434443
}
4444-
for val in &self.type_ {
4444+
for val in &self.r#type {
44454445
::pb_jelly::wire_format::write(73, ::pb_jelly::wire_format::Type::Varint, w)?;
44464446
::pb_jelly::Message::serialize(val, w)?;
44474447
}
4448-
if let Some(TestMessage_Mod::Loop(ref val)) = self.mod_ {
4448+
if let Some(TestMessage_Mod::Loop(ref val)) = self.r#mod {
44494449
::pb_jelly::wire_format::write(74, ::pb_jelly::wire_format::Type::Varint, w)?;
44504450
::pb_jelly::Message::serialize(val, w)?;
44514451
}
4452-
if let Some(TestMessage_Mod::Unsafe(ref val)) = self.mod_ {
4452+
if let Some(TestMessage_Mod::Unsafe(ref val)) = self.r#mod {
44534453
::pb_jelly::wire_format::write(75, ::pb_jelly::wire_format::Type::Varint, w)?;
44544454
::pb_jelly::Message::serialize(val, w)?;
44554455
}
@@ -4956,19 +4956,19 @@ impl ::pb_jelly::Message for TestMessage {
49564956
::pb_jelly::ensure_wire_format(typ, ::pb_jelly::wire_format::Type::Varint, "TestMessage", 73)?;
49574957
let mut val: bool = ::std::default::Default::default();
49584958
::pb_jelly::Message::deserialize(&mut val, buf)?;
4959-
self.type_ = Some(val);
4959+
self.r#type = Some(val);
49604960
}
49614961
74 => {
49624962
::pb_jelly::ensure_wire_format(typ, ::pb_jelly::wire_format::Type::Varint, "TestMessage", 74)?;
49634963
let mut val: i32 = ::std::default::Default::default();
49644964
::pb_jelly::Message::deserialize(&mut val, buf)?;
4965-
self.mod_ = Some(TestMessage_Mod::Loop(val));
4965+
self.r#mod = Some(TestMessage_Mod::Loop(val));
49664966
}
49674967
75 => {
49684968
::pb_jelly::ensure_wire_format(typ, ::pb_jelly::wire_format::Type::Varint, "TestMessage", 75)?;
49694969
let mut val: i32 = ::std::default::Default::default();
49704970
::pb_jelly::Message::deserialize(&mut val, buf)?;
4971-
self.mod_ = Some(TestMessage_Mod::Unsafe(val));
4971+
self.r#mod = Some(TestMessage_Mod::Unsafe(val));
49724972
}
49734973
_ => {
49744974
::pb_jelly::skip(typ, &mut buf)?;
@@ -5053,12 +5053,12 @@ impl ::pb_jelly::Reflection for TestMessage {
50535053
}
50545054
None
50555055
}
5056-
"mod_" => {
5057-
if let Some(TestMessage_Mod::Loop(ref val)) = self.mod_ {
5058-
return Some("loop_");
5056+
"mod" => {
5057+
if let Some(TestMessage_Mod::Loop(ref val)) = self.r#mod {
5058+
return Some("loop");
50595059
}
5060-
if let Some(TestMessage_Mod::Unsafe(ref val)) = self.mod_ {
5061-
return Some("unsafe_");
5060+
if let Some(TestMessage_Mod::Unsafe(ref val)) = self.r#mod {
5061+
return Some("unsafe");
50625062
}
50635063
None
50645064
}
@@ -5345,29 +5345,29 @@ impl ::pb_jelly::Reflection for TestMessage {
53455345
}
53465346
unreachable!()
53475347
}
5348-
"type_" => {
5349-
::pb_jelly::reflection::FieldMut::Value(self.type_.get_or_insert_with(::std::default::Default::default))
5348+
"type" => {
5349+
::pb_jelly::reflection::FieldMut::Value(self.r#type.get_or_insert_with(::std::default::Default::default))
53505350
}
5351-
"loop_" => {
5352-
match self.mod_ {
5351+
"loop" => {
5352+
match self.r#mod {
53535353
Some(TestMessage_Mod::Loop(_)) => (),
53545354
_ => {
5355-
self.mod_ = Some(TestMessage_Mod::Loop(::std::default::Default::default()));
5355+
self.r#mod = Some(TestMessage_Mod::Loop(::std::default::Default::default()));
53565356
},
53575357
}
5358-
if let Some(TestMessage_Mod::Loop(ref mut val)) = self.mod_ {
5358+
if let Some(TestMessage_Mod::Loop(ref mut val)) = self.r#mod {
53595359
return ::pb_jelly::reflection::FieldMut::Value(val);
53605360
}
53615361
unreachable!()
53625362
}
5363-
"unsafe_" => {
5364-
match self.mod_ {
5363+
"unsafe" => {
5364+
match self.r#mod {
53655365
Some(TestMessage_Mod::Unsafe(_)) => (),
53665366
_ => {
5367-
self.mod_ = Some(TestMessage_Mod::Unsafe(::std::default::Default::default()));
5367+
self.r#mod = Some(TestMessage_Mod::Unsafe(::std::default::Default::default()));
53685368
},
53695369
}
5370-
if let Some(TestMessage_Mod::Unsafe(ref mut val)) = self.mod_ {
5370+
if let Some(TestMessage_Mod::Unsafe(ref mut val)) = self.r#mod {
53715371
return ::pb_jelly::reflection::FieldMut::Value(val);
53725372
}
53735373
unreachable!()

0 commit comments

Comments
 (0)