use crate::parser::Port;
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct Endpoint {
pub id: Option<String>,
pub component_id: Option<String>,
pub name: Option<String>,
}
impl Endpoint {
pub fn port(port: &Port) -> Self {
let component_id = port
.source_component_id
.clone()
.or_else(|| prefix_component_id(port.port_id.as_deref()));
Self {
id: port.port_id.clone(),
component_id,
name: port.name.clone(),
}
}
pub fn pad(id: Option<String>) -> Self {
Self {
component_id: prefix_component_id(id.as_deref()),
id,
name: None,
}
}
}
fn prefix_component_id(id: Option<&str>) -> Option<String> {
id?.split_once('.').map(|(comp, _)| comp.to_string())
}