1use crate::errors::MessageRejectErrorEnum;
2use crate::{field_map::LocalField, tag::Tag};
3use simple_error::SimpleResult;
4
5pub trait FieldTag {
6 fn tag(&self) -> Tag;
7}
8
9pub trait FieldValueWriter {
11 fn write_to(&self, buf: &mut Vec<u8>);
13
14 fn write(&self) -> Vec<u8> {
16 let mut buf = Vec::new();
17 self.write_to(&mut buf);
18 buf
19 }
20}
21
22pub trait FieldValueReader {
24 fn read(&mut self, input: &[u8]) -> SimpleResult<()>;
27}
28
29pub trait FieldValue: FieldValueWriter + FieldValueReader {}
31
32pub trait FieldWriter: FieldValueWriter + FieldTag {}
34
35pub trait Field: FieldWriter + FieldValueReader {}
37
38pub trait FieldGroupWriter: FieldTag {
40 fn write(&self) -> LocalField;
41}
42
43pub trait FieldGroupReader: FieldTag {
45 fn read(&mut self, tag_value: LocalField) -> Result<LocalField, MessageRejectErrorEnum>;
46}
47
48pub trait FieldGroup: FieldTag + FieldGroupWriter + FieldGroupReader {}