code_gen/rust/common/
with_generics.rs

1use crate::rust::Var;
2use crate::{CodeBuffer, Expression};
3
4/// An element with generic type parameters.
5pub trait WithGenerics: 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. (ex: `<A: TypeA, B: TypeB>`)
24    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}