use crate::parse::MagnetKind;
use super::Magnet2D;
pub type MagnetVec = Vec<Magnet>;
pub type MagnetVec2D = Vec<Magnet2D>;
pub type MagnetList = Vec<MagnetKind>;
#[derive(Debug, PartialEq)]
pub enum Magnet {
Magnet2D(Magnet2D),
}
pub trait GetCenter<T> {
fn center(&self) -> T;
}
pub trait GetField<INPUT, OUTPUT> {
fn field(&self, point: INPUT) -> OUTPUT;
}
pub trait MagnetTrait<POINT, CENTER, SIZE, MAG> {
fn center(&self) -> CENTER;
fn size(&self) -> SIZE;
fn magnetisation(self) -> MAG;
fn set_center(&mut self, point: CENTER);
fn set_size(&mut self, point: SIZE);
fn set_magnetisation(&mut self, magnetisation: MAG);
}