Skip to main content

configbuilder_pattern_loader/
feature_record_builder.rs

1use crate::{FeatureMetadata, FeatureRecord, OverrideSource};
2
3/// Fluent builder for [`FeatureRecord`].
4///
5/// Start with [`crate::FeatureRecordBuilderOps::new`], chain the setter methods, then
6/// call [`build`] to obtain a [`FeatureRecord`].
7///
8/// [`build`]: crate::FeatureRecordBuilderOps::build
9pub struct FeatureRecordBuilder {
10    section_name: String,
11    enabled: bool,
12    override_source: Option<OverrideSource>,
13    requires: &'static [&'static str],
14    metadata: Box<FeatureMetadata>,
15}
16
17impl FeatureRecordBuilder {
18    pub(crate) fn new(section_name: impl Into<String>) -> Self {
19        Self {
20            section_name: section_name.into(),
21            enabled: false,
22            override_source: None,
23            requires: &[],
24            metadata: Box::new(FeatureMetadata::default()),
25        }
26    }
27
28    pub(crate) fn enabled(mut self, v: bool) -> Self {
29        self.enabled = v;
30        self
31    }
32
33    pub(crate) fn override_source(mut self, v: OverrideSource) -> Self {
34        self.override_source = Some(v);
35        self
36    }
37
38    pub(crate) fn requires(mut self, v: &'static [&'static str]) -> Self {
39        self.requires = v;
40        self
41    }
42
43    pub(crate) fn metadata(mut self, v: FeatureMetadata) -> Self {
44        self.metadata = Box::new(v);
45        self
46    }
47
48    pub(crate) fn build(self) -> FeatureRecord {
49        FeatureRecord {
50            section_name: self.section_name,
51            enabled: self.enabled,
52            override_source: self.override_source,
53            requires: self.requires,
54            metadata: self.metadata,
55        }
56    }
57}
58
59impl crate::FeatureRecordBuilderOps for FeatureRecordBuilder {
60    fn new(section_name: impl Into<String>) -> Self {
61        FeatureRecordBuilder::new(section_name)
62    }
63
64    fn enabled(self, v: bool) -> Self {
65        FeatureRecordBuilder::enabled(self, v)
66    }
67
68    fn override_source(self, v: OverrideSource) -> Self {
69        FeatureRecordBuilder::override_source(self, v)
70    }
71
72    fn requires(self, v: &'static [&'static str]) -> Self {
73        FeatureRecordBuilder::requires(self, v)
74    }
75
76    fn metadata(self, v: FeatureMetadata) -> Self {
77        FeatureRecordBuilder::metadata(self, v)
78    }
79
80    fn build(self) -> FeatureRecord {
81        FeatureRecordBuilder::build(self)
82    }
83}