use crate::kind::{Monotonic, Wrapping};
use crate::Duration;
use crate::Instant;
use crate::Rate;
pub type PicosDuration<T> = Duration<T, 1, 1_000_000_000_000>;
pub type PicosDurationU32 = Duration<u32, 1, 1_000_000_000_000>;
pub type PicosDurationU64 = Duration<u64, 1, 1_000_000_000_000>;
pub type NanosDuration<T> = Duration<T, 1, 1_000_000_000>;
pub type NanosDurationU32 = Duration<u32, 1, 1_000_000_000>;
pub type NanosDurationU64 = Duration<u64, 1, 1_000_000_000>;
pub type MicrosDuration<T> = Duration<T, 1, 1_000_000>;
pub type MicrosDurationU32 = Duration<u32, 1, 1_000_000>;
pub type MicrosDurationU64 = Duration<u64, 1, 1_000_000>;
pub type MillisDuration<T> = Duration<T, 1, 1_000>;
pub type MillisDurationU32 = Duration<u32, 1, 1_000>;
pub type MillisDurationU64 = Duration<u64, 1, 1_000>;
pub type SecsDuration<T> = Duration<T, 1, 1>;
pub type SecsDurationU32 = Duration<u32, 1, 1>;
pub type SecsDurationU64 = Duration<u64, 1, 1>;
pub type MinutesDuration<T> = Duration<T, 60, 1>;
pub type MinutesDurationU32 = Duration<u32, 60, 1>;
pub type MinutesDurationU64 = Duration<u64, 60, 1>;
pub type HoursDuration<T> = Duration<T, 3_600, 1>;
pub type HoursDurationU32 = Duration<u32, 3_600, 1>;
pub type HoursDurationU64 = Duration<u64, 3_600, 1>;
pub type TimerDuration<T, const FREQ_HZ: u64> = Duration<T, 1, FREQ_HZ>;
pub type TimerDurationU32<const FREQ_HZ: u64> = Duration<u32, 1, FREQ_HZ>;
pub type TimerDurationU64<const FREQ_HZ: u64> = Duration<u64, 1, FREQ_HZ>;
pub type MonotonicInstant<T, const NOM: u64, const DENOM: u64> = Instant<T, NOM, DENOM, Monotonic>;
pub type MonotonicTimerInstant<T, const FREQ_HZ: u64> = Instant<T, 1, FREQ_HZ, Monotonic>;
pub type MonotonicTimerInstantU32<const FREQ_HZ: u64> = Instant<u32, 1, FREQ_HZ, Monotonic>;
pub type MonotonicTimerInstantU64<const FREQ_HZ: u64> = Instant<u64, 1, FREQ_HZ, Monotonic>;
pub type WrappingInstant<T, const NOM: u64, const DENOM: u64> = Instant<T, NOM, DENOM, Wrapping>;
pub type WrappingTimerInstant<T, const FREQ_HZ: u64> = Instant<T, 1, FREQ_HZ, Wrapping>;
pub type WrappingTimerInstantU32<const FREQ_HZ: u64> = Instant<u32, 1, FREQ_HZ, Wrapping>;
pub type WrappingTimerInstantU64<const FREQ_HZ: u64> = Instant<u64, 1, FREQ_HZ, Wrapping>;
pub type Hertz<T> = Rate<T, 1, 1>;
pub type HertzU32 = Rate<u32, 1, 1>;
pub type HertzU64 = Rate<u64, 1, 1>;
pub type Kilohertz<T> = Rate<T, 1_000, 1>;
pub type KilohertzU32 = Rate<u32, 1_000, 1>;
pub type KilohertzU64 = Rate<u64, 1_000, 1>;
pub type Megahertz<T> = Rate<T, 1_000_000, 1>;
pub type MegahertzU32 = Rate<u32, 1_000_000, 1>;
pub type MegahertzU64 = Rate<u64, 1_000_000, 1>;
pub type Gigahertz<T> = Rate<T, 1_000_000_000, 1>;
pub type GigahertzU32 = Rate<u32, 1_000_000_000, 1>;
pub type GigahertzU64 = Rate<u64, 1_000_000_000, 1>;
pub type TimerRate<T, const FREQ_HZ: u64> = Rate<T, FREQ_HZ, 1>;
pub type TimerRateU32<const FREQ_HZ: u64> = Rate<u32, FREQ_HZ, 1>;
pub type TimerRateU64<const FREQ_HZ: u64> = Rate<u64, FREQ_HZ, 1>;