use std::fmt;
use tabled::Tabled;
#[derive(Clone, Copy, PartialEq, PartialOrd)]
pub(crate) struct FloatWrapper {
pub(crate) value: f64,
pub(crate) precision: usize, }
impl FloatWrapper {
pub fn new(value: f64, precision: usize) -> Self {
FloatWrapper { value, precision }
}
}
impl Default for FloatWrapper {
fn default() -> Self {
Self {
value: Default::default(),
precision: 3,
}
}
}
impl fmt::Display for FloatWrapper {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{:.1$}", self.value, self.precision)
}
}
impl fmt::Debug for FloatWrapper {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{:.1$}", self.value, self.precision)
}
}
#[derive(Debug, Tabled)]
#[allow(non_snake_case)]
pub(crate) struct BusResTable {
pub(crate) Bus: i32,
pub(crate) Vm: FloatWrapper,
pub(crate) Va: FloatWrapper,
pub(crate) P_mw: FloatWrapper,
pub(crate) Q_mvar: FloatWrapper,
}
#[derive(Debug, Default, Tabled)]
#[allow(non_snake_case)]
pub struct LineResTable {
pub(crate) from: i64,
pub(crate) to: i64,
pub(crate) p_from_mw: FloatWrapper, pub(crate) q_from_mvar: FloatWrapper, pub(crate) p_to_mw: FloatWrapper, pub(crate) q_to_mvar: FloatWrapper, pub(crate) pl_mw: FloatWrapper, pub(crate) ql_mvar: FloatWrapper, pub(crate) i_from_ka: FloatWrapper, pub(crate) i_to_ka: FloatWrapper, pub(crate) i_ka: FloatWrapper, pub(crate) vm_from_pu: FloatWrapper, pub(crate) va_from_degree: FloatWrapper, pub(crate) vm_to_pu: FloatWrapper, pub(crate) va_to_degree: FloatWrapper, pub(crate) loading_percent: FloatWrapper, }