use core::fmt;
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
#[derive(strum::EnumString, strum::Display, strum::IntoStaticStr, strum::EnumIter)]
pub enum LibTimeUnit {
#[strum(serialize = "1ps")]
_1ps,
#[strum(serialize = "10ps")]
_10ps,
#[strum(serialize = "100ps")]
_100ps,
#[default]
#[strum(serialize = "1ns")]
_1ns,
}
impl LibTimeUnit {
#[inline]
#[must_use]
pub const fn value(&self) -> f64 {
match self {
Self::_1ps => 1E-12_f64,
Self::_10ps => 1E-11_f64,
Self::_100ps => 1E-10_f64,
Self::_1ns => 1E-9_f64,
}
}
}
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
#[derive(strum::EnumString, strum::Display, strum::IntoStaticStr, strum::EnumIter)]
pub enum LibVoltageUnit {
#[strum(serialize = "1mV")]
_1mV,
#[strum(serialize = "10mV")]
_10mV,
#[strum(serialize = "100mV")]
_100mV,
#[default]
#[strum(serialize = "1V")]
_1V,
}
impl LibVoltageUnit {
#[inline]
#[must_use]
pub const fn value(&self) -> f64 {
match self {
Self::_1mV => 1E-3_f64,
Self::_10mV => 1E-2_f64,
Self::_100mV => 1E-1_f64,
Self::_1V => 1E0_f64,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
#[derive(strum::EnumString, strum::Display, strum::IntoStaticStr, strum::EnumIter)]
pub enum LibCurrentUnit {
#[strum(serialize = "1uA")]
_1uA,
#[strum(serialize = "10uA")]
_10uA,
#[strum(serialize = "100uA")]
_100uA,
#[strum(serialize = "1mA")]
_1mA,
#[strum(serialize = "10mA")]
_10mA,
#[strum(serialize = "100mA")]
_100mA,
#[strum(serialize = "1A")]
_1A,
}
impl LibCurrentUnit {
#[inline]
#[must_use]
pub const fn value(&self) -> f64 {
match self {
Self::_1uA => 1E-6_f64,
Self::_10uA => 1E-5_f64,
Self::_100uA => 1E-4_f64,
Self::_1mA => 1E-3_f64,
Self::_10mA => 1E-2_f64,
Self::_100mA => 1E-1_f64,
Self::_1A => 1E0_f64,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
#[derive(strum::EnumString, strum::Display, strum::IntoStaticStr, strum::EnumIter)]
pub enum LibPullingResistanceUnit {
#[strum(serialize = "1ohm")]
_1ohm,
#[strum(serialize = "10ohm")]
_10ohm,
#[strum(serialize = "100ohm")]
_100ohm,
#[strum(serialize = "1kohm")]
_1kohm,
}
impl LibPullingResistanceUnit {
#[inline]
#[must_use]
pub const fn value(&self) -> f64 {
match self {
Self::_1ohm => 1E0_f64,
Self::_10ohm => 1E1_f64,
Self::_100ohm => 1E2_f64,
Self::_1kohm => 1E3_f64,
}
}
}
#[derive(Debug, Clone, Copy)]
pub enum LibCapacitiveLoadUnit {
FF(f64),
PF(f64),
}
impl Default for LibCapacitiveLoadUnit {
#[inline]
fn default() -> Self {
Self::_1pf
}
}
impl fmt::Display for LibCapacitiveLoadUnit {
#[inline]
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::FF(val) => write!(f, "{val} ff"),
Self::PF(val) => write!(f, "{val} pf"),
}
}
}
impl LibCapacitiveLoadUnit {
#[expect(non_upper_case_globals)]
pub const _1pf: Self = Self::PF(1.0);
#[expect(non_upper_case_globals)]
pub const _1ff: Self = Self::FF(1.0);
#[inline]
#[must_use]
#[expect(clippy::float_arithmetic)]
pub fn value(&self) -> f64 {
match self {
Self::FF(val) => val * 1e-15,
Self::PF(val) => val * 1e-12,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
#[derive(strum::EnumString, strum::Display, strum::IntoStaticStr, strum::EnumIter)]
pub enum LibLeakagePowerUnit {
#[strum(serialize = "1pW")]
_1pW,
#[strum(serialize = "10pW")]
_10pW,
#[strum(serialize = "100pW")]
_100pW,
#[strum(serialize = "1nW")]
_1nW,
#[strum(serialize = "10nW")]
_10nW,
#[strum(serialize = "100nW")]
_100nW,
#[strum(serialize = "1uW")]
_1uW,
#[strum(serialize = "10uW")]
_10uW,
#[strum(serialize = "100uW")]
_100uW,
#[strum(serialize = "1mW")]
_1mW,
#[strum(serialize = "10mW")]
_10mW,
#[strum(serialize = "100mW")]
_100mW,
#[strum(serialize = "1W")]
_1W,
}
impl LibLeakagePowerUnit {
#[inline]
#[must_use]
pub const fn value(&self) -> f64 {
match self {
Self::_1pW => 1E-12_f64,
Self::_10pW => 1E-11_f64,
Self::_100pW => 1E-10_f64,
Self::_1nW => 1E-9_f64,
Self::_10nW => 1E-8_f64,
Self::_100nW => 1E-7_f64,
Self::_1uW => 1E-6_f64,
Self::_10uW => 1E-5_f64,
Self::_100uW => 1E-4_f64,
Self::_1mW => 1E-3_f64,
Self::_10mW => 1E-2_f64,
Self::_100mW => 1E-1_f64,
Self::_1W => 1E-0_f64,
}
}
}