pub struct DayConfig {
pub min: u8,
pub max: u8,
pub expected: IsExpected,
pub default: Option<u8>,
}Expand description
Configuration for day extraction.
Fields§
§min: u8Minimum valid day value (inclusive). Default: 1.
max: u8Maximum valid day value (inclusive). Default: 31.
expected: IsExpectedWhether a day component is expected in the input.
default: Option<u8>Default day value to use when the day is not found, if any.
Implementations§
Source§impl DayConfig
impl DayConfig
Sourcepub fn try_as_day_candidate(&self, value: i16, digit_count: u8) -> Option<u8>
pub fn try_as_day_candidate(&self, value: i16, digit_count: u8) -> Option<u8>
Return Some(value as u8) when value is a plausible day for this
config, or None when it is not.
A value is a plausible day when:
digit_countis not 4 (four-digit numbers cannot be days).- The value is within the universal day range 1–31.
- The value falls within the caller-configured
min/maxbounds.
Source§impl DayConfig
impl DayConfig
Sourcepub fn with_range(self, min: u8, max: u8) -> Self
pub fn with_range(self, min: u8, max: u8) -> Self
Set the valid day range.
§Panics
Panics if min > max. Use DayConfig::try_with_range when the
values come from dynamic input and you need to handle the error.
use partial_date::models::DayConfig;
let config = DayConfig::default().with_range(1, 28);Sourcepub fn try_with_range(self, min: u8, max: u8) -> Result<Self, ConfigRangeError>
pub fn try_with_range(self, min: u8, max: u8) -> Result<Self, ConfigRangeError>
Set the valid day range, returning Err if min > max.
Use this when the range values come from dynamic input. For
known-valid static values, prefer DayConfig::with_range.
Sourcepub fn with_expected(self, expected: IsExpected) -> Self
pub fn with_expected(self, expected: IsExpected) -> Self
Set whether a day component is expected in the input.
use partial_date::models::{DayConfig, IsExpected};
let config = DayConfig::default().with_expected(IsExpected::Yes);Examples found in repository?
75 pub fn get_config(&self) -> Config {
76 match self {
77 // Strictly day-first numeric dates with all three components
78 // required. Letter-O substitution is disabled since this scenario
79 // expects clean numeric input only.
80 PreDefinedConfigs::StrictDMY => Config::default()
81 .with_day(
82 DayConfig::default()
83 .with_expected(IsExpected::Yes),
84 )
85 .with_month(
86 MonthConfig::default()
87 .with_expected(IsExpected::Yes)
88 )
89 .with_year(
90 YearConfig::default()
91 .with_range(1, 3000)
92 .with_expected(IsExpected::Yes)
93 .with_two_digit_expansion(TwoDigitYearExpansion::Literal),
94 )
95 .with_component_order(
96 ComponentOrder::new(
97 DateComponent::Day,
98 DateComponent::Month,
99 DateComponent::Year,
100 )
101 .unwrap(),
102 )
103 .with_letter_o_substitution(false),
104
105 // Wide ranging historical dates that cannot use 2-digit year
106 // expansion as there is no way to know which centuries the dates
107 // will be from. Minimal assumptions about the data when there is
108 // a lot of uncertainty.
109 PreDefinedConfigs::AllHistoricalDates => Config::default().with_year(
110 YearConfig::default()
111 .with_range(1, 3000)
112 .with_expected(IsExpected::Yes)
113 .with_two_digit_expansion(TwoDigitYearExpansion::Literal),
114 ),
115
116 // Constrains the year range to the Industrial Revolution period and
117 // uses a sliding window for 2-digit years centred on 1800.
118 // Component order matches Great Britain's common DD/MM/YYYY format.
119 PreDefinedConfigs::IndustrialRevolutionDates => Config::default()
120 .with_year(
121 YearConfig::default()
122 .with_range(1760, 1840)
123 .with_expected(IsExpected::Yes)
124 .with_two_digit_expansion(TwoDigitYearExpansion::SlidingWindow {
125 earliest_year: 1750,
126 pivot: SlidingWindowPivot::new(50),
127 }),
128 )
129 .with_component_order(
130 ComponentOrder::new(
131 DateComponent::Day,
132 DateComponent::Month,
133 DateComponent::Year,
134 )
135 .unwrap(),
136 ),
137
138 // Children under 18 — birth years must be in the 2000s and not in
139 // the future. Always(Century(2000)) maps all 2-digit values to the
140 // 2000s; the max of 2026 rejects future years.
141 PreDefinedConfigs::ChildrenBirthdays => Config::default().with_year(
142 YearConfig::default()
143 .with_range(2000, 2026)
144 .with_expected(IsExpected::Yes)
145 .with_two_digit_expansion(TwoDigitYearExpansion::Always(Century::new(2000)))
146 .with_single_digit_expansion(true),
147 ),
148 }
149 }Sourcepub fn with_default(self, default: u8) -> Self
pub fn with_default(self, default: u8) -> Self
Set the default day value to use when no day is found in the input.
use partial_date::models::DayConfig;
let config = DayConfig::default().with_default(1);