zarja_core/proto/
writer.rs1use prost_types::{
7 DescriptorProto, EnumDescriptorProto, FieldDescriptorProto, FileDescriptorProto,
8 MethodDescriptorProto, OneofDescriptorProto, ServiceDescriptorProto,
9};
10use std::fmt::Result;
11
12pub trait ProtoWriter {
36 fn write_file(&mut self, file: &FileDescriptorProto) -> Result {
38 let _ = file;
39 Ok(())
40 }
41
42 fn write_message(&mut self, message: &DescriptorProto) -> Result {
44 let _ = message;
45 Ok(())
46 }
47
48 fn write_field(&mut self, field: &FieldDescriptorProto) -> Result {
50 let _ = field;
51 Ok(())
52 }
53
54 fn write_enum(&mut self, enum_type: &EnumDescriptorProto) -> Result {
56 let _ = enum_type;
57 Ok(())
58 }
59
60 fn write_service(&mut self, service: &ServiceDescriptorProto) -> Result {
62 let _ = service;
63 Ok(())
64 }
65
66 fn write_method(&mut self, method: &MethodDescriptorProto) -> Result {
68 let _ = method;
69 Ok(())
70 }
71
72 fn write_oneof(&mut self, oneof: &OneofDescriptorProto) -> Result {
74 let _ = oneof;
75 Ok(())
76 }
77}
78
79pub struct NullWriter;
81
82impl ProtoWriter for NullWriter {}
83
84#[derive(Debug, Default)]
86pub struct StatsWriter {
87 pub message_count: usize,
89 pub field_count: usize,
91 pub enum_count: usize,
93 pub service_count: usize,
95 pub method_count: usize,
97}
98
99impl ProtoWriter for StatsWriter {
100 fn write_message(&mut self, _message: &DescriptorProto) -> Result {
101 self.message_count += 1;
102 Ok(())
103 }
104
105 fn write_field(&mut self, _field: &FieldDescriptorProto) -> Result {
106 self.field_count += 1;
107 Ok(())
108 }
109
110 fn write_enum(&mut self, _enum_type: &EnumDescriptorProto) -> Result {
111 self.enum_count += 1;
112 Ok(())
113 }
114
115 fn write_service(&mut self, _service: &ServiceDescriptorProto) -> Result {
116 self.service_count += 1;
117 Ok(())
118 }
119
120 fn write_method(&mut self, _method: &MethodDescriptorProto) -> Result {
121 self.method_count += 1;
122 Ok(())
123 }
124}
125
126#[cfg(test)]
127mod tests {
128 use super::*;
129
130 #[test]
131 fn test_null_writer() {
132 let mut writer = NullWriter;
133 assert!(writer.write_file(&FileDescriptorProto::default()).is_ok());
134 }
135
136 #[test]
137 fn test_stats_writer() {
138 let mut writer = StatsWriter::default();
139 writer.write_message(&DescriptorProto::default()).unwrap();
140 writer.write_message(&DescriptorProto::default()).unwrap();
141 writer.write_field(&FieldDescriptorProto::default()).unwrap();
142
143 assert_eq!(writer.message_count, 2);
144 assert_eq!(writer.field_count, 1);
145 }
146}