use crate::types::*;
use crate::expression::{BooleanExpression, CommonState};
use crate::timing::Timing;
mod items;
pub use items::*;
#[derive(Debug, Default)]
pub struct Pin<'a>{
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<BooleanExpression>,
pub clamp_1_function: Option<BooleanExpression>,
pub clamp_latch_function: Option<BooleanExpression>,
pub clamp_z_function: Option<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<BooleanExpression>,
pub has_builtin_pad: Option<BooleanExpression>,
pub hysteresis: bool,
pub illegal_clamp_condition: Option<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 restore_action: Option<CommonState>,
pub save_action: Option<CommonState>,
pub timing_list: Vec<Timing<'a>>,
}