use protobuf::reflect::EnumDescriptor; use protobuf::reflect::EnumValueDescriptor; use protobuf::reflect::FieldDescriptor; use protobuf::reflect::MessageDescriptor; use protobuf::reflect::OneofDescriptor; use crate::gen::code_writer::CodeWriter; use crate::Customize; /// Write `// @protoc_insertion_point(...)` before the element. /// /// This is similar to what `protoc` codegen does for C++ or Java. /// This can be used to modify the generated code. fn write_protoc_insertion_point(w: &mut CodeWriter, customize: &Customize, arg: &str) { for line in customize.before.iter().flat_map(|s| s.lines()) { w.write_line(line); } w.comment(&format!("@@protoc_insertion_point({})", arg)); } pub(crate) fn write_protoc_insertion_point_for_message( w: &mut CodeWriter, customize: &Customize, message: &MessageDescriptor, ) { write_protoc_insertion_point(w, customize, &format!("message:{}", message.full_name())); } pub(crate) fn write_protoc_insertion_point_for_field( w: &mut CodeWriter, customize: &Customize, field: &FieldDescriptor, ) { write_protoc_insertion_point(w, customize, &format!("field:{}", field.full_name())); } pub(crate) fn write_protoc_insertion_point_for_special_field( w: &mut CodeWriter, customize: &Customize, message: &MessageDescriptor, field: &str, ) { write_protoc_insertion_point( w, customize, &format!("special_field:{}.{}", message.full_name(), field), ); } pub(crate) fn write_protoc_insertion_point_for_enum( w: &mut CodeWriter, customize: &Customize, enumeration: &EnumDescriptor, ) { write_protoc_insertion_point(w, customize, &format!("enum:{}", enumeration.full_name())); } pub(crate) fn write_protoc_insertion_point_for_enum_value( w: &mut CodeWriter, customize: &Customize, value: &EnumValueDescriptor, ) { write_protoc_insertion_point(w, customize, &format!("enum_value:{}", value.full_name())); } pub(crate) fn write_protoc_insertion_point_for_oneof( w: &mut CodeWriter, customize: &Customize, oneof: &OneofDescriptor, ) { write_protoc_insertion_point(w, customize, &format!("oneof:{}", oneof.full_name())); } pub(crate) fn write_protoc_insertion_point_for_oneof_field( w: &mut CodeWriter, customize: &Customize, field: &FieldDescriptor, ) { write_protoc_insertion_point(w, customize, &format!("oneof_field:{}", field.full_name())); }