Skip to main content

use_electronics/
lib.rs

1#![forbid(unsafe_code)]
2#![doc = include_str!("../README.md")]
3
4//! Thin facade for practical electronics primitive crates.
5
6pub 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
18/// Common electronics primitive types from the focused crates.
19pub 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}