libsurfer/translation/
clock.rs
1use surfer_translation_types::{TranslationResult, Translator, VariableInfo, VariableValue};
2
3use crate::message::Message;
4use crate::translation::{AnyTranslator, BitTranslator};
5use crate::wave_container::{ScopeId, VarId, VariableMeta};
6
7pub struct ClockTranslator {
8 inner: AnyTranslator,
10}
11
12impl ClockTranslator {
13 pub fn new() -> Self {
14 Self {
15 inner: AnyTranslator::Basic(Box::new(BitTranslator {})),
16 }
17 }
18}
19
20impl Default for ClockTranslator {
21 fn default() -> Self {
22 Self::new()
23 }
24}
25
26impl Translator<VarId, ScopeId, Message> for ClockTranslator {
27 fn name(&self) -> String {
28 "Clock".to_string()
29 }
30
31 fn translate(
32 &self,
33 variable: &surfer_translation_types::VariableMeta<VarId, ScopeId>,
34 value: &VariableValue,
35 ) -> eyre::Result<TranslationResult> {
36 self.inner.translate(variable, value)
37 }
38
39 fn variable_info(&self, _variable: &VariableMeta) -> eyre::Result<VariableInfo> {
40 Ok(VariableInfo::Clock)
41 }
42
43 fn translates(&self, variable: &VariableMeta) -> eyre::Result<super::TranslationPreference> {
44 if variable.num_bits == Some(1) {
45 Ok(super::TranslationPreference::Yes)
46 } else {
47 Ok(super::TranslationPreference::No)
48 }
49 }
50}