use deep_causality_core::CausalityError;
use deep_causality_multivector::{CausalMultiVector, Metric};
use deep_causality_num::RealField;
#[derive(Debug, Clone, Copy, PartialEq, PartialOrd)]
pub struct ElectricPotential<R: RealField>(R);
impl<R: RealField> Default for ElectricPotential<R> {
fn default() -> Self {
Self(R::zero())
}
}
impl<R: RealField> ElectricPotential<R> {
pub fn new(val: R) -> Result<Self, CausalityError> {
Ok(Self(val))
}
pub fn new_unchecked(val: R) -> Self {
Self(val)
}
pub fn value(&self) -> R {
self.0
}
}
impl<R: RealField + Into<f64>> From<ElectricPotential<R>> for f64 {
fn from(val: ElectricPotential<R>) -> Self {
val.0.into()
}
}
#[derive(Debug, Clone, Copy, PartialEq, PartialOrd)]
pub struct MagneticFlux<R: RealField>(R);
impl<R: RealField> Default for MagneticFlux<R> {
fn default() -> Self {
Self(R::zero())
}
}
impl<R: RealField> MagneticFlux<R> {
pub fn new(val: R) -> Result<Self, CausalityError> {
Ok(Self(val))
}
pub fn new_unchecked(val: R) -> Self {
Self(val)
}
pub fn value(&self) -> R {
self.0
}
}
impl<R: RealField + Into<f64>> From<MagneticFlux<R>> for f64 {
fn from(val: MagneticFlux<R>) -> Self {
val.0.into()
}
}
#[derive(Debug, Clone, PartialEq)]
pub struct PhysicalField<R: RealField>(pub CausalMultiVector<R>);
impl<R: RealField> Default for PhysicalField<R> {
fn default() -> Self {
Self(CausalMultiVector::new(vec![R::zero(); 8], Metric::Euclidean(3)).unwrap())
}
}
impl<R: RealField> PhysicalField<R> {
pub fn new(val: CausalMultiVector<R>) -> Self {
Self(val)
}
pub fn inner(&self) -> &CausalMultiVector<R> {
&self.0
}
pub fn into_inner(self) -> CausalMultiVector<R> {
self.0
}
}