1 use protobuf::reflect::EnumDescriptor;
2 use protobuf::reflect::EnumValueDescriptor;
3 use protobuf::reflect::FieldDescriptor;
4 use protobuf::reflect::MessageDescriptor;
5 use protobuf::reflect::OneofDescriptor;
6
7 use crate::gen::code_writer::CodeWriter;
8 use crate::Customize;
9
10 /// Write `// @protoc_insertion_point(...)` before the element.
11 ///
12 /// This is similar to what `protoc` codegen does for C++ or Java.
13 /// This can be used to modify the generated code.
write_protoc_insertion_point(w: &mut CodeWriter, customize: &Customize, arg: &str)14 fn write_protoc_insertion_point(w: &mut CodeWriter, customize: &Customize, arg: &str) {
15 for line in customize.before.iter().flat_map(|s| s.lines()) {
16 w.write_line(line);
17 }
18 w.comment(&format!("@@protoc_insertion_point({})", arg));
19 }
20
write_protoc_insertion_point_for_message( w: &mut CodeWriter, customize: &Customize, message: &MessageDescriptor, )21 pub(crate) fn write_protoc_insertion_point_for_message(
22 w: &mut CodeWriter,
23 customize: &Customize,
24 message: &MessageDescriptor,
25 ) {
26 write_protoc_insertion_point(w, customize, &format!("message:{}", message.full_name()));
27 }
28
write_protoc_insertion_point_for_field( w: &mut CodeWriter, customize: &Customize, field: &FieldDescriptor, )29 pub(crate) fn write_protoc_insertion_point_for_field(
30 w: &mut CodeWriter,
31 customize: &Customize,
32 field: &FieldDescriptor,
33 ) {
34 write_protoc_insertion_point(w, customize, &format!("field:{}", field.full_name()));
35 }
36
write_protoc_insertion_point_for_special_field( w: &mut CodeWriter, customize: &Customize, message: &MessageDescriptor, field: &str, )37 pub(crate) fn write_protoc_insertion_point_for_special_field(
38 w: &mut CodeWriter,
39 customize: &Customize,
40 message: &MessageDescriptor,
41 field: &str,
42 ) {
43 write_protoc_insertion_point(
44 w,
45 customize,
46 &format!("special_field:{}.{}", message.full_name(), field),
47 );
48 }
49
write_protoc_insertion_point_for_enum( w: &mut CodeWriter, customize: &Customize, enumeration: &EnumDescriptor, )50 pub(crate) fn write_protoc_insertion_point_for_enum(
51 w: &mut CodeWriter,
52 customize: &Customize,
53 enumeration: &EnumDescriptor,
54 ) {
55 write_protoc_insertion_point(w, customize, &format!("enum:{}", enumeration.full_name()));
56 }
57
write_protoc_insertion_point_for_enum_value( w: &mut CodeWriter, customize: &Customize, value: &EnumValueDescriptor, )58 pub(crate) fn write_protoc_insertion_point_for_enum_value(
59 w: &mut CodeWriter,
60 customize: &Customize,
61 value: &EnumValueDescriptor,
62 ) {
63 write_protoc_insertion_point(w, customize, &format!("enum_value:{}", value.full_name()));
64 }
65
write_protoc_insertion_point_for_oneof( w: &mut CodeWriter, customize: &Customize, oneof: &OneofDescriptor, )66 pub(crate) fn write_protoc_insertion_point_for_oneof(
67 w: &mut CodeWriter,
68 customize: &Customize,
69 oneof: &OneofDescriptor,
70 ) {
71 write_protoc_insertion_point(w, customize, &format!("oneof:{}", oneof.full_name()));
72 }
73
write_protoc_insertion_point_for_oneof_field( w: &mut CodeWriter, customize: &Customize, field: &FieldDescriptor, )74 pub(crate) fn write_protoc_insertion_point_for_oneof_field(
75 w: &mut CodeWriter,
76 customize: &Customize,
77 field: &FieldDescriptor,
78 ) {
79 write_protoc_insertion_point(w, customize, &format!("oneof_field:{}", field.full_name()));
80 }
81