#![allow(missing_docs)]
use dtt::prelude::*;
use time::UtcOffset;
fn main() -> Result<(), AppError> {
let epoch = DateTimeBuilder::default().build()?;
println!("Epoch : {epoch}");
assert_eq!(epoch, DateTime::default());
let new_year = DateTimeBuilder::new()
.year(2026)
.month(1)
.day(1)
.hour(0)
.minute(0)
.second(0)
.offset(UtcOffset::UTC)
.build()?;
println!("New Year UTC : {new_year}");
let just_year = DateTimeBuilder::new().year(2030).build()?;
println!("Year-only : {just_year}");
let ist = DateTimeBuilder::new()
.year(2024)
.month(8)
.day(15)
.hour(10)
.minute(30)
.second(0)
.offset(UtcOffset::from_hms(5, 30, 0).expect("valid offset"))
.build()?;
println!("IST midday : {ist}");
let bad = DateTimeBuilder::new()
.year(2024)
.month(2)
.day(30) .build();
assert!(matches!(bad, Err(DateTimeError::InvalidDate)));
println!("Invalid Feb 30 : rejected as expected");
let base = DateTimeBuilder::new().year(2024).month(6).day(1);
let morning = base.hour(8).minute(0).build()?;
let evening = base.hour(20).minute(0).build()?;
println!("Same date, AM : {morning}");
println!("Same date, PM : {evening}");
assert_eq!(morning.day(), evening.day());
Ok(())
}