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