protobuf_codegen/gen/field/
singular.rs1use crate::gen::field::elem::FieldElem;
2use crate::gen::field::option_kind::OptionKind;
3use crate::gen::file_and_mod::FileAndMod;
4use crate::gen::rust_types_values::RustType;
5use crate::Customize;
6
7#[derive(Clone, PartialEq, Eq, Copy)]
8pub enum SingularFieldFlag {
9 WithFlag {
11 required: bool,
12 option_kind: OptionKind,
13 },
14 WithoutFlag,
16}
17
18impl SingularFieldFlag {
19 pub fn is_required(&self) -> bool {
20 match *self {
21 SingularFieldFlag::WithFlag { required, .. } => required,
22 SingularFieldFlag::WithoutFlag => false,
23 }
24 }
25}
26
27#[derive(Clone)]
28pub(crate) struct SingularField<'a> {
29 pub flag: SingularFieldFlag,
30 pub elem: FieldElem<'a>,
31}
32
33impl<'a> SingularField<'a> {
34 pub(crate) fn rust_storage_type(&self, reference: &FileAndMod) -> RustType {
35 match self.flag {
36 SingularFieldFlag::WithFlag { option_kind, .. } => {
37 option_kind.wrap_element(self.elem.rust_storage_elem_type(reference))
38 }
39 SingularFieldFlag::WithoutFlag => self.elem.rust_storage_elem_type(reference),
40 }
41 }
42
43 pub(crate) fn default_value(
44 &self,
45 customize: &Customize,
46 reference: &FileAndMod,
47 const_expr: bool,
48 ) -> String {
49 self.rust_storage_type(reference)
50 .default_value(customize, const_expr)
51 }
52}