xsd_types/value/
g_day.rs

1use chrono::FixedOffset;
2
3use crate::{format_timezone, Datatype, ParseXsd, XsdValue};
4use core::fmt;
5
6#[derive(Debug, Clone, Copy)]
7pub struct GDay {
8	day: u8,
9	offset: Option<FixedOffset>,
10}
11
12impl GDay {
13	pub fn new(day: u8, offset: Option<FixedOffset>) -> Option<Self> {
14		if (1..=31).contains(&day) {
15			Some(Self { day, offset })
16		} else {
17			None
18		}
19	}
20}
21
22impl XsdValue for GDay {
23	fn datatype(&self) -> Datatype {
24		Datatype::GDay
25	}
26}
27
28impl ParseXsd for GDay {
29	type LexicalForm = crate::lexical::GDay;
30}
31
32impl fmt::Display for GDay {
33	fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
34		write!(f, "---{:02}", self.day)?;
35
36		format_timezone(self.offset, f)
37	}
38}