use crate::Value;
use crate::{Result, ValueType};
pub trait MessageFactory {
fn start_template(&mut self, id: u32, name: &str);
fn stop_template(&mut self);
fn set_value(&mut self, id: u32, name: &str, value: Option<Value>);
fn start_sequence(&mut self, id: u32, name: &str, length: u32);
fn start_sequence_item(&mut self, index: u32);
fn stop_sequence_item(&mut self);
fn stop_sequence(&mut self);
fn start_group(&mut self, name: &str);
fn stop_group(&mut self);
fn start_template_ref(&mut self, name: &str, dynamic: bool);
fn stop_template_ref(&mut self);
}
#[allow(clippy::missing_errors_doc)]
pub trait MessageVisitor {
fn get_template_name(&mut self) -> Result<String>;
fn get_value(&mut self, name: &str, type_: &ValueType) -> Result<Option<Value>>;
fn select_group(&mut self, name: &str) -> Result<bool>;
fn release_group(&mut self) -> Result<()>;
fn select_sequence(&mut self, name: &str) -> Result<Option<usize>>;
fn select_sequence_item(&mut self, index: usize) -> Result<()>;
fn release_sequence_item(&mut self) -> Result<()>;
fn release_sequence(&mut self) -> Result<()>;
fn select_template_ref(&mut self, name: &str, dynamic: bool) -> Result<Option<String>>;
fn release_template_ref(&mut self) -> Result<()>;
}