nunc 0.2.0

WIP: time tracking application
Documentation
use rusqlite::Result as SqlResult;

use greg::{
	Point,
	Scale,
	Calendar
};
use greg::calendar::{
	Date,
	DateTime,
	Time
};

use crate::Nunc;
use crate::core::{
	Zone,
	zone::Table
};

pub struct LookupFormatter<'n> {
	pub nunc: &'n Nunc,
	pub cal: Calendar<Table>
}

pub fn format_by(datetime: DateTime, scale: Scale) -> String {
	let dt @ DateTime(
		date @ Date {y, m: mo, d: _},
		Time {h, m, s: _}
	) = datetime;

	match scale {
		Scale::Years => format!("{y:04}"),
		Scale::Months => format!("{y:04}-{mo:02}"),
		Scale::Weeks |
		Scale::Days => date.to_string(),
		Scale::Hours |
		Scale::Minutes => format!("{date} {h:02}:{m:02}"),
		Scale::Seconds => dt.to_string(),
	}
}

impl<'n> LookupFormatter<'n> {
	pub fn new(nunc: &'n Nunc) -> SqlResult<Self> {
		let cal = nunc.load_calendar()?;
		Ok(Self{nunc, cal})
	}
	pub fn format_by(&self, scale: Scale, point: Point) -> String {
		format_by(self.cal.lookup(point), scale)
	}
}