pub struct FormatVersion(/* private fields */);Expand description
A BDEW EDI@Energy format version effective-date identifier.
BDEW uses the convention FV<YYYY>-<MM>-<DD>, e.g. FV2024-10-01 for the
format version that became effective on 1 October 2024.
Use FormatVersion::parse to construct from user-supplied strings with
pattern validation. Use FormatVersion::new only for compile-time
constants where the value is already known-valid.
The inner string is stored opaquely so future BDEW versioning conventions can be accommodated without breaking the engine API.
Implementations§
Source§impl FormatVersion
impl FormatVersion
Sourcepub fn new(v: impl Into<Box<str>>) -> Self
pub fn new(v: impl Into<Box<str>>) -> Self
Unchecked constructor for known-valid compile-time literals only.
Constructs a FormatVersion without validating the input against the
BDEW FV<YYYY>-<MM>-<DD> pattern. Passing an invalid string will not
panic, but it will produce a value that fails later assertions, fails
round-trip equality with FormatVersion::parse, and may cause
confusing errors when stored or transmitted.
Use parse for all runtime and user-supplied strings. This
includes strings read from config files, environment variables,
EDIFACT messages, API request bodies, or any other external source.
Correct usage — compile-time literal only:
use mako_engine::version::FormatVersion;
// ✓ Known-valid compile-time literal
let fv = FormatVersion::new("FV2024-10-01");
assert_eq!(fv.as_str(), "FV2024-10-01");Incorrect usage — use parse instead:
use mako_engine::version::FormatVersion;
// ✗ Do NOT pass user-supplied or deserialized strings to `new`
// let fv = FormatVersion::new(some_config_value);
// ✓ Use parse for anything that is not a compile-time literal
let fv = FormatVersion::parse("FV2024-10-01").unwrap();Sourcepub fn parse(s: &str) -> Result<Self, FormatVersionError>
pub fn parse(s: &str) -> Result<Self, FormatVersionError>
Parse and validate a BDEW FV<YYYY>-<MM>-<DD> format version string.
Accepts exactly the BDEW naming convention. Rejects:
- Missing
FVprefix ("2024-10-01") - Malformed date components (
"FV2024-13-01"— month 13) - Non-numeric year/month/day
- Any other format
The year must be ≥ 2000 (no BDEW EDI@Energy format versions exist before then). There is no upper bound: the date is validated using the calendar, eliminating the former year-2100 ceiling.
§Errors
Returns FormatVersionError with the rejected input and a reason
string when the input does not match the expected pattern.
§Example
use mako_engine::version::FormatVersion;
assert!(FormatVersion::parse("FV2024-10-01").is_ok());
assert!(FormatVersion::parse("FV2025-04-01").is_ok());
// No upper year bound:
assert!(FormatVersion::parse("FV2101-04-01").is_ok());
assert!(FormatVersion::parse("FV9999-12-31").is_ok());
assert!(FormatVersion::parse("2024-10-01").is_err()); // missing FV prefix
assert!(FormatVersion::parse("FV2024-13-01").is_err()); // invalid month
assert!(FormatVersion::parse("FV2024-00-01").is_err()); // zero month
assert!(FormatVersion::parse("FV2024-10-00").is_err()); // zero day
assert!(FormatVersion::parse("FV2024-10-32").is_err()); // day > 31
assert!(FormatVersion::parse("v2024").is_err()); // wrong prefixTrait Implementations§
Source§impl Clone for FormatVersion
impl Clone for FormatVersion
Source§fn clone(&self) -> FormatVersion
fn clone(&self) -> FormatVersion
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for FormatVersion
impl Debug for FormatVersion
Source§impl<'de> Deserialize<'de> for FormatVersion
impl<'de> Deserialize<'de> for FormatVersion
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl Display for FormatVersion
impl Display for FormatVersion
impl Eq for FormatVersion
Source§impl From<&str> for FormatVersion
impl From<&str> for FormatVersion
Source§impl From<String> for FormatVersion
impl From<String> for FormatVersion
Source§impl Hash for FormatVersion
impl Hash for FormatVersion
Source§impl PartialEq for FormatVersion
impl PartialEq for FormatVersion
Source§fn eq(&self, other: &FormatVersion) -> bool
fn eq(&self, other: &FormatVersion) -> bool
self and other values to be equal, and is used by ==.