code_gen/rust/function/
with_fn_generics.rs1use crate::rust::Var;
2use crate::{CodeBuffer, Expression, WithName};
3
4pub trait WithFnGenerics: 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 if let Some((first, rest)) = self.generics().split_first() {
26 b.write("<");
27 first.write_name(b);
28 for generic in rest {
29 b.write(", ");
30 generic.write_name(b);
31 }
32 b.write(">");
33 }
34 }
35
36 fn write_generic_where(&self, b: &mut CodeBuffer) {
38 if let Some((first, rest)) = self.generics().split_first() {
39 b.write(" where ");
40 first.write(b);
41 for generic in rest {
42 b.write(", ");
43 generic.write(b);
44 }
45 }
46 }
47}