Oregami
Repositories/oxedyne/fe2o3

oxedyne/fe2o3/fe2o3_datime/src/core/field.rs

2.9 KiB, 8 runs

created by r1870400018:6347, which is this file's identity for as long as the history lasts, whatever it is later renamed to

download · who wrote it · its history

1//! [Written with AI entirely](https://need2know.ai/entirely-ai/code)\
2//! Anthropic Claude
3
4use oxedyne_fe2o3_core::prelude::*;
5
6#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
7pub enum TimeField {
8 Year,
9 Month,
10 Day,
11 Hour,
12 Minute,
13 Second,
14 NanoSecond,
15 DayOfWeek,
16 DayOfYear,
17 WeekOfYear,
18}
19
20#[derive(Clone, Debug, Default)]
21pub struct TimeFieldHolder {
22 pub year: Option<i32>,
23 pub month: Option<u8>,
24 pub day: Option<u8>,
25 pub hour: Option<u8>,
26 pub minute: Option<u8>,
27 pub second: Option<u8>,
28 pub nanosecond: Option<u32>,
29 pub day_of_week: Option<u8>,
30}
31
32impl TimeFieldHolder {
33 pub fn new() -> Self {
34 Self::default()
35 }
36
37 pub fn set_field(&mut self, field: TimeField, value: i64) -> Outcome<()> {
38 match field {
39 TimeField::Year => {
40 self.year = Some(value as i32);
41 },
42 TimeField::Month => {
43 if value < 1 || value > 12 {
44 return Err(err!("Month value {} out of range 1-12", value; Invalid, Input, Range));
45 }
46 self.month = Some(value as u8);
47 },
48 TimeField::Day => {
49 if value < 1 || value > 31 {
50 return Err(err!("Day value {} out of range 1-31", value; Invalid, Input, Range));
51 }
52 self.day = Some(value as u8);
53 },
54 TimeField::Hour => {
55 if value < 0 || value > 23 {
56 return Err(err!("Hour value {} out of range 0-23", value; Invalid, Input, Range));
57 }
58 self.hour = Some(value as u8);
59 },
60 TimeField::Minute => {
61 if value < 0 || value > 59 {
62 return Err(err!("Minute value {} out of range 0-59", value; Invalid, Input, Range));
63 }
64 self.minute = Some(value as u8);
65 },
66 TimeField::Second => {
67 if value < 0 || value > 59 {
68 return Err(err!("Second value {} out of range 0-59", value; Invalid, Input, Range));
69 }
70 self.second = Some(value as u8);
71 },
72 TimeField::NanoSecond => {
73 if value < 0 || value > 999_999_999 {
74 return Err(err!("Nanosecond value {} out of range 0-999999999", value; Invalid, Input, Range));
75 }
76 self.nanosecond = Some(value as u32);
77 },
78 TimeField::DayOfWeek => {
79 if value < 1 || value > 7 {
80 return Err(err!("Day of week value {} out of range 1-7", value; Invalid, Input, Range));
81 }
82 self.day_of_week = Some(value as u8);
83 },
84 _ => {
85 return Err(err!("Cannot set field {:?} directly", field; Invalid, Input));
86 }
87 }
88 Ok(())
89 }
90}