1 use crate::gen::field::elem::FieldElem;
2 use crate::gen::file_and_mod::FileAndMod;
3 use crate::gen::rust::snippets::EXPR_VEC_NEW;
4 use crate::gen::rust_types_values::RustType;
5 
6 /// Repeated field can be `Vec<T>` or `RepeatedField<T>`.
7 #[derive(Eq, PartialEq, Copy, Clone)]
8 pub enum RepeatedFieldKind {
9     Vec,
10 }
11 
12 impl RepeatedFieldKind {
wrap_element(&self, element_type: RustType) -> RustType13     fn wrap_element(&self, element_type: RustType) -> RustType {
14         let element_type = Box::new(element_type);
15         match self {
16             RepeatedFieldKind::Vec => RustType::Vec(element_type),
17         }
18     }
19 
default(&self) -> String20     fn default(&self) -> String {
21         match self {
22             RepeatedFieldKind::Vec => EXPR_VEC_NEW.to_owned(),
23         }
24     }
25 }
26 
27 #[derive(Clone)]
28 pub(crate) struct RepeatedField<'a> {
29     pub elem: FieldElem<'a>,
30     pub packed: bool,
31 }
32 
33 impl<'a> RepeatedField<'a> {
kind(&self) -> RepeatedFieldKind34     pub(crate) fn kind(&self) -> RepeatedFieldKind {
35         RepeatedFieldKind::Vec
36     }
37 
rust_type(&self, reference: &FileAndMod) -> RustType38     pub(crate) fn rust_type(&self, reference: &FileAndMod) -> RustType {
39         self.kind()
40             .wrap_element(self.elem.rust_storage_elem_type(reference))
41     }
42 
default(&self) -> String43     pub(crate) fn default(&self) -> String {
44         self.kind().default()
45     }
46 }
47