ligen_utils/transformers/
mod.rs

1use ligen_ir::Library;
2
3pub mod path;
4pub mod alias;
5
6pub trait Transform<In: Sized, Out: Sized> {
7    fn transform(&self, data: &In) -> Out;
8}
9
10pub trait Transformable: Sized + Clone {
11    fn transform<T: Transform<Self, Self>>(&self, transform: T) -> Self {
12        transform.transform(self)
13    }
14
15    fn transforms(&self, transforms: &[&dyn Transform<Self, Self>]) -> Self {
16        let mut data = self.clone();
17        for transform in transforms {
18            data = transform.transform(&data);
19        }
20        data
21    }
22}
23
24impl Transformable for Library {}