1#![forbid(unsafe_code)]
2#![doc = include_str!("../README.md")]
3
4pub use use_board as board;
7pub use use_capacitor as capacitor;
8pub use use_circuit as circuit;
9pub use use_component as component;
10pub use use_diode as diode;
11pub use use_net_label as net_label;
12pub use use_package as package;
13pub use use_pin as pin;
14pub use use_rating as rating;
15pub use use_resistor as resistor;
16pub use use_transistor as transistor;
17
18pub mod prelude {
20 pub use crate::board::{BoardLayer, BoardName, BoardSide, LayerCount};
21 pub use crate::capacitor::{CapacitanceValue, CapacitorKind, CapacitorPolarity, CapacitorSpec};
22 pub use crate::circuit::{Connection, NetId, NodeId, Terminal};
23 pub use crate::component::{ComponentKind, ComponentValue, ReferenceDesignator};
24 pub use crate::diode::{DiodeKind, DiodePolarity, DiodeSpec};
25 pub use crate::net_label::{GroundKind, NetLabel, PowerRail, SignalName};
26 pub use crate::package::{PackageKind, PackageName, PackagePitch, PinCount};
27 pub use crate::pin::{PinName, PinNumber, PinPolarity, PinRef, PinRole};
28 pub use crate::rating::{
29 CurrentRating, FrequencyRating, PowerRating, TemperatureRating, Tolerance, VoltageRating,
30 };
31 pub use crate::resistor::{ResistanceValue, ResistorKind, ResistorSpec};
32 pub use crate::transistor::{
33 BjtKind, FetKind, TransistorKind, TransistorSpec, TransistorTerminal,
34 };
35}
36
37#[cfg(test)]
38mod tests {
39 use super::{board, circuit, component, net_label, pin, rating, resistor};
40
41 #[test]
42 fn facade_exposes_composable_electronics_primitives() -> Result<(), Box<dyn std::error::Error>>
43 {
44 let reference = component::ReferenceDesignator::new("R1")?;
45 let resistance = resistor::ResistanceValue::new_ohms(10_000.0)?;
46 let tolerance = rating::Tolerance::from_percent(1.0)?;
47 let spec = resistor::ResistorSpec::new(resistance, resistor::ResistorKind::Fixed)
48 .with_tolerance(tolerance);
49 let pin_one = pin::PinRef::numbered(reference.clone(), pin::PinNumber::new(1)?);
50 let pin_two = pin::PinRef::numbered(reference, pin::PinNumber::new(2)?);
51 let label = net_label::NetLabel::new("SENSE")?;
52 let connection = circuit::Connection::to_net(
53 circuit::Terminal::from_pin_ref(pin_one),
54 circuit::NetId::new(label.as_str())?,
55 );
56 let layer = board::BoardLayer::TopCopper;
57
58 assert_eq!(spec.tolerance().map(rating::Tolerance::percent), Some(1.0));
59 assert_eq!(pin_two.pin().to_string(), "2");
60 assert_eq!(connection.target().to_string(), "net:SENSE");
61 assert_eq!(layer.to_string(), "top-copper");
62 Ok(())
63 }
64}