radnelac 0.0.2

Calculations in a variety of different timekeeping systems.
Documentation
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at https://mozilla.org/MPL/2.0/.

use radnelac::calendar::Armenian;
use radnelac::calendar::Coptic;
use radnelac::calendar::Cotsworth;
use radnelac::calendar::Egyptian;
use radnelac::calendar::Ethiopic;
use radnelac::calendar::FrenchRevArith;
use radnelac::calendar::Gregorian;
use radnelac::calendar::Holocene;
use radnelac::calendar::Julian;
use radnelac::calendar::Olympiad;
use radnelac::calendar::Positivist;
use radnelac::calendar::Roman;
use radnelac::calendar::Symmetry010;
use radnelac::calendar::Symmetry010Solstice;
use radnelac::calendar::Symmetry454;
use radnelac::calendar::Symmetry454Solstice;
use radnelac::calendar::TranquilityMoment;
use radnelac::calendar::ISO;
use radnelac::clock::TimeOfDay;
use radnelac::day_count::BoundedDayCount;
use radnelac::day_count::EffectiveBound;
use radnelac::day_count::Fixed;
use radnelac::day_count::FromFixed;
use radnelac::day_count::JulianDay;
use radnelac::day_count::ModifiedJulianDay;
use radnelac::day_count::RataDie;
use radnelac::day_count::ToFixed;
use radnelac::day_count::UnixMoment;
use radnelac::day_cycle::Akan;
use radnelac::day_cycle::Weekday;
use std::time::{SystemTime, UNIX_EPOCH};

fn main() {
    println!("Today is:");
    print_today();
    println!("\n\n");
    println!("Effective Minimum is:");
    print_t(Fixed::effective_min());
    println!("\n\n");
    println!("Effective Maximum is:");
    print_t(Fixed::effective_max());
}

fn print_today() {
    let t_system = match SystemTime::now().duration_since(UNIX_EPOCH) {
        Ok(n) => n.as_secs(),
        Err(_) => panic!("SystemTime before UNIX_EPOCH"),
    };
    let t_unix = UnixMoment::new(t_system as i64);
    let t_fixed = t_unix.to_fixed();
    print_t(t_fixed);
}

#[cfg(not(feature = "display"))]
fn print_t(t_fixed: Fixed) {
    let m_clk = TimeOfDay::from_fixed(t_fixed);
    let t_unix = UnixMoment::from_fixed(t_fixed);
    let t_jd = JulianDay::from_fixed(t_fixed);
    let t_mjd = ModifiedJulianDay::from_fixed(t_fixed);
    let t_rd = RataDie::from_fixed(t_fixed);
    let w_week = Weekday::from_fixed(t_fixed);
    let w_akan = Akan::from_fixed(t_fixed);
    let d_egyptian = Egyptian::from_fixed(t_fixed);
    let d_armenian = Armenian::from_fixed(t_fixed);
    let d_gregorian = Gregorian::from_fixed(t_fixed);
    let d_julian = Julian::from_fixed(t_fixed);
    let d_roman = Roman::from_fixed(t_fixed);
    let d_coptic = Coptic::from_fixed(t_fixed);
    let d_ethiopic = Ethiopic::from_fixed(t_fixed);
    let d_iso = ISO::from_fixed(t_fixed);
    let d_holocene = Holocene::from_fixed(t_fixed);
    let d_french0 = FrenchRevArith::<true>::from_fixed(t_fixed);
    let d_french1 = FrenchRevArith::<false>::from_fixed(t_fixed);
    let d_positivist = Positivist::from_fixed(t_fixed);
    let d_cotsworth = Cotsworth::from_fixed(t_fixed);
    let d_symmetry454 = Symmetry454::from_fixed(t_fixed);
    let d_symmetry010 = Symmetry010::from_fixed(t_fixed);
    let d_symmetry454s = Symmetry454Solstice::from_fixed(t_fixed);
    let d_symmetry010s = Symmetry010Solstice::from_fixed(t_fixed);
    let d_tranquility = TranquilityMoment::from_fixed(t_fixed);
    let y_roman = Roman::auc_year_from_julian(d_julian.nz_year());
    let y_olympiad = Olympiad::from_julian_year(d_julian.nz_year());

    println!("{:?}", m_clk);
    println!("{:?}", t_unix);
    println!("{:?}", t_jd);
    println!("{:?}", t_mjd);
    println!("{:?}", t_rd);
    println!("{:?}", w_week);
    println!("{:?}", w_akan);
    println!("{:?}", d_egyptian);
    println!("{:?}", d_armenian);
    println!("{:?}", d_gregorian);
    println!("{:?}", d_julian);
    println!("{:?}", d_coptic);
    println!("{:?}", d_ethiopic);
    println!("{:?}", d_roman);
    println!("{:?}", d_iso);
    println!("{:?}", d_holocene);
    println!("{:?} mode: {:?}", d_french0, d_french0.is_adjusted());
    println!("{:?} mode: {:?}", d_french1, d_french1.is_adjusted());
    println!("{:?}", d_positivist);
    println!("{:?}", d_cotsworth);
    println!("{:?} mode: {:?}", d_symmetry454, d_symmetry454.mode());
    println!("{:?} mode: {:?}", d_symmetry010, d_symmetry010.mode());
    println!("{:?} mode: {:?}", d_symmetry454s, d_symmetry454s.mode());
    println!("{:?} mode: {:?}", d_symmetry010s, d_symmetry010s.mode());
    println!("{:?}", d_tranquility);
    println!("{:?} AUC", y_roman);
    println!("{:?}", y_olympiad);
}

#[cfg(feature = "display")]
fn print_t(t_fixed: Fixed) {
    let m_clk = TimeOfDay::from_fixed(t_fixed);
    let t_unix = UnixMoment::from_fixed(t_fixed);
    let t_jd = JulianDay::from_fixed(t_fixed);
    let t_mjd = ModifiedJulianDay::from_fixed(t_fixed);
    let t_rd = RataDie::from_fixed(t_fixed);
    let w_week = Weekday::from_fixed(t_fixed);
    let w_akan = Akan::from_fixed(t_fixed);
    let d_egyptian = Egyptian::from_fixed(t_fixed);
    let d_armenian = Armenian::from_fixed(t_fixed);
    let d_gregorian = Gregorian::from_fixed(t_fixed);
    let d_julian = Julian::from_fixed(t_fixed);
    let d_roman = Roman::from_fixed(t_fixed);
    let d_coptic = Coptic::from_fixed(t_fixed);
    let d_ethiopic = Ethiopic::from_fixed(t_fixed);
    let d_iso = ISO::from_fixed(t_fixed);
    let d_holocene = Holocene::from_fixed(t_fixed);
    let d_french0 = FrenchRevArith::<true>::from_fixed(t_fixed);
    let d_french1 = FrenchRevArith::<false>::from_fixed(t_fixed);
    let d_positivist = Positivist::from_fixed(t_fixed);
    let d_cotsworth = Cotsworth::from_fixed(t_fixed);
    let d_symmetry454 = Symmetry454::from_fixed(t_fixed);
    let d_symmetry010 = Symmetry010::from_fixed(t_fixed);
    let d_symmetry454s = Symmetry454Solstice::from_fixed(t_fixed);
    let d_symmetry010s = Symmetry010Solstice::from_fixed(t_fixed);
    let d_tranquility = TranquilityMoment::from_fixed(t_fixed);
    let y_roman = Roman::auc_year_from_julian(d_julian.nz_year());
    let y_olympiad = Olympiad::from_julian_year(d_julian.nz_year());

    println!("{} ({:?})", m_clk, m_clk);
    println!("{:?}", t_unix);
    println!("{:?}", t_jd);
    println!("{:?}", t_mjd);
    println!("{:?}", t_rd);
    println!("{} ({:?})", w_week, w_week);
    println!("{} ({:?})", w_akan, w_akan);
    println!("{} ({:?})", d_egyptian, d_egyptian);
    println!("{} ({:?})", d_armenian, d_armenian);
    println!("{} ({:?})", d_gregorian, d_gregorian);
    println!("{} ({:?})", d_julian, d_julian);
    println!("{} ({:?})", d_coptic, d_coptic);
    println!("{} ({:?})", d_ethiopic, d_ethiopic);
    println!("{} ({:?})", d_roman, d_roman);
    println!("{} ({:?})", d_iso, d_iso);
    println!("{} ({:?})", d_holocene, d_holocene);
    println!(
        "{} ({:?} mode: {:?})",
        d_french0,
        d_french0,
        d_french0.is_adjusted()
    );
    println!(
        "{} ({:?} mode: {:?})",
        d_french1,
        d_french1,
        d_french1.is_adjusted()
    );
    println!("{} ({:?})", d_positivist, d_positivist);
    println!("{} ({:?})", d_cotsworth, d_cotsworth);
    println!(
        "{} ({:?} mode: {:?})",
        d_symmetry454,
        d_symmetry454,
        d_symmetry454.mode()
    );
    println!(
        "{} ({:?} mode: {:?})",
        d_symmetry010,
        d_symmetry010,
        d_symmetry010.mode()
    );
    println!(
        "{} ({:?} mode: {:?})",
        d_symmetry454s,
        d_symmetry454s,
        d_symmetry454s.mode()
    );
    println!(
        "{} ({:?} mode: {:?})",
        d_symmetry010s,
        d_symmetry010s,
        d_symmetry010s.mode()
    );
    println!("{} ({:?})", d_tranquility, d_tranquility);
    println!("{:?} AUC", y_roman);
    println!("{:?}", y_olympiad);
}