use crate::types::*;
use crate::expression;
use crate::timing::Timing;
mod items;
pub use items::*;
use crate::units;
#[derive(Debug, Default, Clone)]
#[derive(liberty_macros::GroupHashed)]
#[derive(liberty_macros::NameIdx)]
pub struct Pin{
#[idx_len(1)]
_idx: Box<<Self as crate::ast::HashedGroup>::Idx>,
_undefined: crate::ast::UndefinedAttributes,
pub group_name: String,
pub alive_during_partial_power_down: bool,
pub alive_during_power_up: bool,
pub always_on: bool,
pub antenna_diode_type: Option<AntennaDiodeType>,
pub bit_width: usize,
pub capacitance: Float,
pub clamp_0_function: Option<expression::BooleanExpression>,
pub clamp_1_function: Option<expression::BooleanExpression>,
pub clamp_latch_function: Option<expression::BooleanExpression>,
pub clamp_z_function: Option<expression::BooleanExpression>,
pub clock: bool,
pub clock_gate_clock_pin: bool,
pub clock_gate_enable_pin: bool,
pub clock_gate_test_pin: bool,
pub clock_gate_obs_pin: bool,
pub clock_gate_out_pin: bool,
pub clock_isolation_cell_clock_pin: bool,
pub complementary_pin: String,
pub connection_class: Vec<String>,
pub direction: Option<Direction>,
pub dont_fault: Option<DontFault>,
pub drive_current: Float,
pub driver_type: Option<DriverType>,
pub fall_capacitance: Float,
pub fall_current_slope_after_threshold: Float,
pub fall_current_slope_before_threshold: Float,
pub fall_time_after_threshold: Float,
pub fall_time_before_threshold: Float,
pub fanout_load: Float,
pub function: Option<expression::BooleanExpression>,
pub has_builtin_pad: Option<expression::BooleanExpression>,
pub hysteresis: bool,
pub illegal_clamp_condition: Option<expression::BooleanExpression>,
pub input_map: Vec<String>,
pub input_signal_level: String,
pub input_voltage : String,
pub internal_node: String,
pub inverted_output: bool,
pub is_pad : bool,
pub is_unconnected : bool,
pub max_capacitance: Float,
pub max_fanout: Float,
pub max_input_delta_overdrive_high: Float,
pub max_input_delta_underdrive_high: Float,
pub max_transition: Float,
pub min_capacitance: Float,
pub min_fanout: Float,
pub min_period: Float,
pub min_pulse_width_high: Float,
pub min_pulse_width_low: Float,
pub min_transition: Float,
pub multicell_pad_pin : bool,
pub nextstate_type: Option<NextstateType>,
pub output_signal_level: String,
pub output_signal_level_high: Float,
pub output_signal_level_low: Float,
pub output_voltage : String,
pub pin_func_type : Option<PinFuncType>,
pub prefer_tied : bool,
pub primary_output: bool,
pub pulling_current: Option<units::ElectricCurrent>,
pub pulling_resistance: Option<units::ElectricalResistance>,
pub restore_action: Option<expression::CommonState>,
pub restore_edge_type: Option<RestoreEdgeType>,
pub rise_capacitance: Option<units::Capacitance>,
pub rise_current_slope_after_threshold: Float,
pub rise_current_slope_before_threshold: Float,
pub rise_time_after_threshold: Float,
pub rise_time_before_threshold: Float,
pub save_action: Option<expression::CommonState>,
pub signal_type: Option<SignalType>,
pub slew_control: SlewControl,
pub state_function: Option<expression::BooleanExpression>,
pub test_output_only: bool,
pub three_state: Option<expression::BooleanExpression>,
pub x_function: Option<expression::BooleanExpression>,
pub fall_capacitance_range: Option<(units::Capacitance, units::Capacitance)>,
pub rise_capacitance_range: Option<(units::Capacitance, units::Capacitance)>,
pub timing: Vec<Timing>,
}