libsurfer/
variable_direction.rs1use crate::wave_container::VariableMeta;
2use egui_remixicon::icons;
3use surfer_translation_types::{VariableDirection, VariableNameInfo};
4
5#[local_impl::local_impl]
6impl VariableDirectionExt for VariableDirection {
7 fn from_wellen_direction(direction: wellen::VarDirection) -> VariableDirection {
8 match direction {
9 wellen::VarDirection::Unknown => VariableDirection::Unknown,
10 wellen::VarDirection::Implicit => VariableDirection::Implicit,
11 wellen::VarDirection::Input => VariableDirection::Input,
12 wellen::VarDirection::Output => VariableDirection::Output,
13 wellen::VarDirection::InOut => VariableDirection::InOut,
14 wellen::VarDirection::Buffer => VariableDirection::Buffer,
15 wellen::VarDirection::Linkage => VariableDirection::Linkage,
16 }
17 }
18
19 fn get_icon(&self) -> Option<&str> {
20 match self {
21 VariableDirection::Unknown => None,
22 VariableDirection::Implicit => None,
23 VariableDirection::Input => Some(icons::CONTRACT_RIGHT_FILL),
24 VariableDirection::Output => Some(icons::EXPAND_RIGHT_FILL),
25 VariableDirection::InOut => Some(icons::ARROW_LEFT_RIGHT_LINE),
26 VariableDirection::Buffer => None,
27 VariableDirection::Linkage => Some(icons::LINK),
28 }
29 }
30}
31
32#[must_use]
33pub fn get_direction_string(
34 meta: Option<&VariableMeta>,
35 name_info: Option<&VariableNameInfo>,
36) -> Option<String> {
37 meta.as_ref()
38 .and_then(|meta| meta.direction)
39 .map(|direction| {
40 format!(
41 "{} ",
42 direction.get_icon().unwrap_or_else(|| {
44 if meta.as_ref().is_some_and(|meta| meta.is_parameter()) {
45 icons::MAP_PIN_2_LINE
47 } else {
48 if name_info.is_some() { " " } else { " " }
51 }
52 })
53 )
54 })
55}