kanamaru_build/utils/
service_generator_chain.rs

1use std::ops::{Deref, DerefMut};
2
3use prost_build::ServiceGenerator;
4
5type Inner = Vec<Box<dyn ServiceGenerator>>;
6
7/// A very simple and strait-forward ServiceGeneratorChain
8pub 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}