use std::collections::HashMap;
use derive_builder::Builder;
use reda_unit::{Length, Number};
use crate::ToSpice;
#[derive(Debug, Clone, Builder)]
#[builder(setter(strip_option, into))]
pub struct MosFET {
pub name: String, pub drain: String, pub gate: String, pub source: String, pub bulk: String, pub model_name: String, pub length: Length, pub width: Length, #[builder(default)]
pub parameters: HashMap<String, Number>,
}
impl ToSpice for MosFET {
fn to_spice(&self) -> String {
let mut line = format!(
"M{} {} {} {} {} {} L={} W={}",
self.name,
self.drain,
self.gate,
self.source,
self.bulk,
self.model_name,
self.length,
self.width
);
for (k, v) in &self.parameters {
line.push_str(&format!(" {}={}", k, v));
}
line
}
}
#[derive(Debug, Clone)]
pub enum MOSFETKind {
NMOS,
PMOS,
}