#[cfg(feature = "std")]
use derive_more::Display;
use enum_dispatch::enum_dispatch;
use crate::{
base::{Float, Pose, Source, Transform},
magnets::{
CuboidMagnet, CylinderMagnet, Dipole, SphereMagnet, TetrahedronMagnet, TriangleMagnet,
},
};
#[cfg(feature = "mesh")]
use crate::magnets::MeshMagnet;
use nalgebra::{Point3, Vector3};
#[derive(Clone, Debug, PartialEq, Eq)]
#[cfg_attr(feature = "std", derive(Display))]
#[enum_dispatch(Source<T>, Transform<T>,)]
pub enum Magnet<T: Float = f64> {
Cylinder(CylinderMagnet<T>),
Cuboid(CuboidMagnet<T>),
Dipole(Dipole<T>),
Sphere(SphereMagnet<T>),
Tetrahedron(TetrahedronMagnet<T>),
Triangle(TriangleMagnet<T>),
#[cfg(feature = "mesh")]
Mesh(MeshMagnet<T>),
}
#[cfg(all(test, feature = "std"))]
mod tests {
use super::*;
#[test]
fn test_display() {
let magnet: Magnet = CylinderMagnet::default().into();
assert_eq!(
format!("{}", magnet),
"CylinderMagnet (pol=[0.0, 0.0, 1.0], d=1.0, h=1.0) at pos=[0.0, 0.0, 0.0], rot=[0.0, 0.0, 0.0]"
);
}
}