code_gen/rust/common/
with_generics.rs1use crate::rust::Var;
2use crate::{CodeBuffer, Expression};
3
4pub trait WithGenerics: Sized {
6 fn generics(&self) -> &[Var];
8
9 fn add_generic<V>(&mut self, generic: V)
11 where
12 V: Into<Var>;
13
14 fn with_generic<V>(mut self, generic: V) -> Self
16 where
17 V: Into<Var>,
18 {
19 self.add_generic(generic);
20 self
21 }
22
23 fn write_generic_brackets(&self, b: &mut CodeBuffer) {
25 b.write("<");
26 if let Some((first, rest)) = self.generics().split_first() {
27 first.write(b);
28 for generic in rest {
29 b.write(", ");
30 generic.write(b);
31 }
32 }
33 b.write(">");
34 }
35}