nu_plugin_units 0.1.8

A Nushell plugin for easily converting between common units
Documentation
use super::{Category, ConversionFunction, ConversionFunctionMap};
use std::{collections::HashMap, convert::identity};
use unit_conversions::time::*;

const CENTURIES: &str = "centuries";
const DAYS: &str = "days";
const DECADES: &str = "decades";
const HOURS: &str = "hours";
const MICROSECONDS: &str = "microseconds";
const MILLISECONDS: &str = "milliseconds";
const MINUTES: &str = "minutes";
const MONTHS: &str = "months";
const NANOSECONDS: &str = "nanoseconds";
const SECONDS: &str = "seconds";
const WEEKS: &str = "weeks";
const YEARS: &str = "years";

pub struct Time;

impl Category for Time {
    fn name() -> &'static str {
        "time"
    }
    fn conversion_function_map() -> ConversionFunctionMap {
        HashMap::from_iter([
            (
                CENTURIES,
                HashMap::from_iter([
                    (CENTURIES, identity as ConversionFunction),
                    (DAYS, centuries::to_days),
                    (DECADES, centuries::to_decades),
                    (HOURS, centuries::to_hours),
                    (MICROSECONDS, centuries::to_microseconds),
                    (MILLISECONDS, centuries::to_milliseconds),
                    (MINUTES, centuries::to_minutes),
                    (MONTHS, centuries::to_months),
                    (NANOSECONDS, centuries::to_nanoseconds),
                    (SECONDS, centuries::to_seconds),
                    (WEEKS, centuries::to_weeks),
                    (YEARS, centuries::to_years),
                ]),
            ),
            (
                DAYS,
                HashMap::from_iter([
                    (CENTURIES, days::to_centuries as ConversionFunction),
                    (DAYS, identity),
                    (DECADES, days::to_decades),
                    (HOURS, days::to_hours),
                    (MICROSECONDS, days::to_microseconds),
                    (MILLISECONDS, days::to_milliseconds),
                    (MINUTES, days::to_minutes),
                    (MONTHS, days::to_months),
                    (NANOSECONDS, days::to_nanoseconds),
                    (SECONDS, days::to_seconds),
                    (WEEKS, days::to_weeks),
                    (YEARS, days::to_years),
                ]),
            ),
            (
                DECADES,
                HashMap::from_iter([
                    (CENTURIES, decades::to_centuries as ConversionFunction),
                    (DAYS, decades::to_days),
                    (DECADES, identity),
                    (HOURS, decades::to_hours),
                    (MICROSECONDS, decades::to_microseconds),
                    (MILLISECONDS, decades::to_milliseconds),
                    (MINUTES, decades::to_minutes),
                    (MONTHS, decades::to_months),
                    (NANOSECONDS, decades::to_nanoseconds),
                    (SECONDS, decades::to_seconds),
                    (WEEKS, decades::to_weeks),
                    (YEARS, decades::to_years),
                ]),
            ),
            (
                HOURS,
                HashMap::from_iter([
                    (CENTURIES, hours::to_centuries as ConversionFunction),
                    (DAYS, hours::to_days),
                    (DECADES, hours::to_decades),
                    (HOURS, identity),
                    (MICROSECONDS, hours::to_microseconds),
                    (MILLISECONDS, hours::to_milliseconds),
                    (MINUTES, hours::to_minutes),
                    (MONTHS, hours::to_months),
                    (NANOSECONDS, hours::to_nanoseconds),
                    (SECONDS, hours::to_seconds),
                    (WEEKS, hours::to_weeks),
                    (YEARS, hours::to_years),
                ]),
            ),
            (
                MICROSECONDS,
                HashMap::from_iter([
                    (CENTURIES, microseconds::to_centuries as ConversionFunction),
                    (DAYS, microseconds::to_days),
                    (DECADES, microseconds::to_decades),
                    (HOURS, microseconds::to_hours),
                    (MICROSECONDS, identity),
                    (MILLISECONDS, microseconds::to_milliseconds),
                    (MINUTES, microseconds::to_minutes),
                    (MONTHS, microseconds::to_months),
                    (NANOSECONDS, microseconds::to_nanoseconds),
                    (SECONDS, microseconds::to_seconds),
                    (WEEKS, microseconds::to_weeks),
                    (YEARS, microseconds::to_years),
                ]),
            ),
            (
                MILLISECONDS,
                HashMap::from_iter([
                    (CENTURIES, milliseconds::to_centuries as ConversionFunction),
                    (DAYS, milliseconds::to_days),
                    (DECADES, milliseconds::to_decades),
                    (HOURS, milliseconds::to_hours),
                    (MICROSECONDS, milliseconds::to_microseconds),
                    (MILLISECONDS, identity),
                    (MINUTES, milliseconds::to_minutes),
                    (MONTHS, milliseconds::to_months),
                    (NANOSECONDS, milliseconds::to_nanoseconds),
                    (SECONDS, milliseconds::to_seconds),
                    (WEEKS, milliseconds::to_weeks),
                    (YEARS, milliseconds::to_years),
                ]),
            ),
            (
                MINUTES,
                HashMap::from_iter([
                    (CENTURIES, minutes::to_centuries as ConversionFunction),
                    (DAYS, minutes::to_days),
                    (DECADES, minutes::to_decades),
                    (HOURS, minutes::to_hours),
                    (MICROSECONDS, minutes::to_microseconds),
                    (MILLISECONDS, minutes::to_milliseconds),
                    (MINUTES, identity),
                    (MONTHS, minutes::to_months),
                    (NANOSECONDS, minutes::to_nanoseconds),
                    (SECONDS, minutes::to_seconds),
                    (WEEKS, minutes::to_weeks),
                    (YEARS, minutes::to_years),
                ]),
            ),
            (
                MONTHS,
                HashMap::from_iter([
                    (CENTURIES, months::to_centuries as ConversionFunction),
                    (DAYS, months::to_days),
                    (DECADES, months::to_decades),
                    (HOURS, months::to_hours),
                    (MICROSECONDS, months::to_microseconds),
                    (MILLISECONDS, months::to_milliseconds),
                    (MINUTES, months::to_minutes),
                    (MONTHS, identity),
                    (NANOSECONDS, months::to_nanoseconds),
                    (SECONDS, months::to_seconds),
                    (WEEKS, months::to_weeks),
                    (YEARS, months::to_years),
                ]),
            ),
            (
                NANOSECONDS,
                HashMap::from_iter([
                    (CENTURIES, nanoseconds::to_centuries as ConversionFunction),
                    (DAYS, nanoseconds::to_days),
                    (DECADES, nanoseconds::to_decades),
                    (HOURS, nanoseconds::to_hours),
                    (MICROSECONDS, nanoseconds::to_microseconds),
                    (MILLISECONDS, nanoseconds::to_milliseconds),
                    (MINUTES, nanoseconds::to_minutes),
                    (MONTHS, nanoseconds::to_months),
                    (NANOSECONDS, identity),
                    (SECONDS, nanoseconds::to_seconds),
                    (WEEKS, nanoseconds::to_weeks),
                    (YEARS, nanoseconds::to_years),
                ]),
            ),
            (
                SECONDS,
                HashMap::from_iter([
                    (CENTURIES, seconds::to_centuries as ConversionFunction),
                    (DAYS, seconds::to_days),
                    (DECADES, seconds::to_decades),
                    (HOURS, seconds::to_hours),
                    (MICROSECONDS, seconds::to_microseconds),
                    (MILLISECONDS, seconds::to_milliseconds),
                    (MINUTES, seconds::to_minutes),
                    (MONTHS, seconds::to_months),
                    (NANOSECONDS, seconds::to_nanoseconds),
                    (SECONDS, identity),
                    (WEEKS, seconds::to_weeks),
                    (YEARS, seconds::to_years),
                ]),
            ),
            (
                WEEKS,
                HashMap::from_iter([
                    (CENTURIES, weeks::to_centuries as ConversionFunction),
                    (DAYS, weeks::to_days),
                    (DECADES, weeks::to_decades),
                    (HOURS, weeks::to_hours),
                    (MICROSECONDS, weeks::to_microseconds),
                    (MILLISECONDS, weeks::to_milliseconds),
                    (MINUTES, weeks::to_minutes),
                    (MONTHS, weeks::to_months),
                    (NANOSECONDS, weeks::to_nanoseconds),
                    (SECONDS, weeks::to_seconds),
                    (WEEKS, identity),
                    (YEARS, weeks::to_years),
                ]),
            ),
            (
                YEARS,
                HashMap::from_iter([
                    (CENTURIES, years::to_centuries as ConversionFunction),
                    (DAYS, years::to_days),
                    (DECADES, years::to_decades),
                    (HOURS, years::to_hours),
                    (MICROSECONDS, years::to_microseconds),
                    (MILLISECONDS, years::to_milliseconds),
                    (MINUTES, years::to_minutes),
                    (MONTHS, years::to_months),
                    (NANOSECONDS, years::to_nanoseconds),
                    (SECONDS, years::to_seconds),
                    (WEEKS, years::to_weeks),
                    (YEARS, identity),
                ]),
            ),
        ])
    }
}