use std::sync::Arc;
use stem_material::prelude::*;
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
#[cfg(feature = "serde")]
use serde_mosaic::{deserialize_arc_link, serialize_arc_link};
use super::wire::Wire;
#[derive(Debug, Clone)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", serde(deny_unknown_fields))]
pub struct CastWire(
#[cfg_attr(
feature = "serde",
serde(
serialize_with = "serialize_arc_link",
deserialize_with = "deserialize_arc_link"
)
)]
Arc<Material>,
);
impl CastWire {
pub fn new(material: Arc<Material>) -> Self {
return CastWire(material);
}
}
#[cfg_attr(feature = "serde", typetag::serde)]
impl Wire for CastWire {
fn material(&self) -> &Material {
return &*self.0;
}
fn material_arc(&self) -> Arc<Material> {
return self.0.clone();
}
fn effective_conductor_area(&self, zone_area: Area, _turns_per_slot: usize) -> Area {
return zone_area;
}
fn effective_overall_area(&self, zone_area: Area, _turns_per_slot: usize) -> Area {
return zone_area;
}
fn slot_fill_factor_conductor(&self, _zone_area: Area, _turns: usize) -> f64 {
return 1.0;
}
fn slot_fill_factor_overall(&self, _zone_area: Area, _turns: usize) -> f64 {
return 1.0;
}
}