use crate::Scalar;
use crate::units::charge::{Charge, ChargeUnit};
pub trait HasNetCharge<V: Scalar> {
fn net_charge<U: ChargeUnit>(&self) -> Charge<V, U>;
}
#[cfg(test)]
mod tests {
use super::*;
use crate::units::charge::ElementaryCharge;
struct Ion {
charge: Charge<f64, ElementaryCharge>,
}
impl HasNetCharge<f64> for Ion {
fn net_charge<U: ChargeUnit>(&self) -> Charge<f64, U> {
self.charge.to()
}
}
#[test]
fn net_charge() {
let ion = Ion {
charge: Charge::new(-1.0),
};
assert_eq!(ion.net_charge::<ElementaryCharge>(), Charge::new(-1.0));
}
}