Skip to main content

libsurfer/translation/
event_translator.rs

1use surfer_translation_types::{
2    TranslationResult, Translator, ValueKind, VariableInfo, VariableType, VariableValue,
3};
4
5use crate::message::Message;
6use crate::wave_container::{ScopeId, VarId, VariableMeta};
7
8pub struct EventTranslator;
9
10impl Translator<VarId, ScopeId, Message> for EventTranslator {
11    fn name(&self) -> String {
12        "Event".to_string()
13    }
14
15    fn translate(
16        &self,
17        _variable: &VariableMeta,
18        _value: &VariableValue,
19    ) -> eyre::Result<TranslationResult> {
20        Ok(TranslationResult {
21            val: surfer_translation_types::ValueRepr::Event,
22            subfields: vec![],
23            kind: ValueKind::Event,
24        })
25    }
26
27    fn variable_info(&self, _variable: &VariableMeta) -> eyre::Result<VariableInfo> {
28        Ok(VariableInfo::Event)
29    }
30
31    fn translates(&self, variable: &VariableMeta) -> eyre::Result<super::TranslationPreference> {
32        if variable.num_bits == Some(0) {
33            match &variable.variable_type {
34                Some(VariableType::VCDEvent) => Ok(super::TranslationPreference::Prefer),
35                _ => Ok(super::TranslationPreference::No),
36            }
37        } else {
38            Ok(super::TranslationPreference::No)
39        }
40    }
41}