lyrical_meter/
meter_builder.rs

1crate::ix!();
2
3/// Builder for `Meter`.
4pub struct MeterBuilder {
5    standard: Option<LyricalMeterBuilder>,
6    other:    Option<OtherMeter>,
7}
8
9impl MeterBuilder {
10
11    /// Starts building a `Standard` meter.
12    pub fn standard() -> LyricalMeterBuilder {
13        LyricalMeterBuilder::default()
14    }
15
16    /// Sets an `OtherMeter` variant.
17    pub fn other(other_meter: OtherMeter) -> Self {
18        MeterBuilder {
19            standard: None,
20            other: Some(other_meter),
21        }
22    }
23
24    /// Builds and returns the final `Meter`.
25    pub fn build(self) -> Meter {
26        if let Some(other_meter) = self.other {
27            Meter::Other(other_meter)
28        } else if let Some(lyrical_meter_builder) = self.standard {
29            Meter::Standard(lyrical_meter_builder.build())
30        } else {
31            // Default to a standard meter if none is set
32            Meter::Standard(LyricalMeter::default())
33        }
34    }
35}
36
37impl Default for MeterBuilder {
38    fn default() -> Self {
39        MeterBuilder {
40            standard: Some(LyricalMeterBuilder::default()),
41            other: None,
42        }
43    }
44}