kanamaru_build/utils/
service_generator_chain.rs1use std::ops::{Deref, DerefMut};
2
3use prost_build::ServiceGenerator;
4
5type Inner = Vec<Box<dyn ServiceGenerator>>;
6
7pub struct ServiceGeneratorChain(Inner);
9
10impl Deref for ServiceGeneratorChain {
11 type Target = Inner;
12 fn deref(&self) -> &Self::Target {
13 &self.0
14 }
15}
16
17impl DerefMut for ServiceGeneratorChain {
18 fn deref_mut(&mut self) -> &mut Self::Target {
19 &mut self.0
20 }
21}
22
23impl ServiceGenerator for ServiceGeneratorChain {
24 fn generate(&mut self, service: prost_build::Service, buf: &mut String) {
25 for generator in self.iter_mut() {
26 generator.generate(service.clone(), buf);
27 }
28 }
29 fn finalize(&mut self, _buf: &mut String) {
30 for generator in self.iter_mut() {
31 generator.finalize(_buf);
32 }
33 }
34 fn finalize_package(&mut self, _package: &str, _buf: &mut String) {
35 for generator in self.iter_mut() {
36 generator.finalize_package(_package, _buf);
37 }
38 }
39}