code_gen/rust/function/
with_fn_generics.rs

1use crate::rust::Var;
2use crate::{CodeBuffer, Expression, WithName};
3
4/// An element with function generics.
5pub trait WithFnGenerics: Sized {
6    /// Gets the generic type parameters.
7    fn generics(&self) -> &[Var];
8
9    /// Adds the `generic` type parameter.
10    fn add_generic<V>(&mut self, generic: V)
11    where
12        V: Into<Var>;
13
14    /// Adds the `generic` type parameter.
15    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    /// Writes the generic brackets.
24    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    //// Writes the generic where clause.
37    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}