pub struct MutableStructEncoder<'a> { /* private fields */ }Expand description
Encoder fuer einen @mutable-Struct mit Validierung der
non-optional-Member-Vollstaendigkeit (XTypes 1.3 §7.4.1.2.3).
Vor jedem Member-Encode wird member_id als “emitted” gemerkt; beim
finish muss jede in required_ids aufgelistete Member-ID emittiert
worden sein, sonst wird EncodeError::MissingNonOptionalMember
zurueckgegeben.
Spec-Hintergrund: Eine EXTENSIBLE (final/appendable/mutable)-Encode
MUSS alle non-optional Member enthalten. Dieser Validator schliesst
das Encoder-Loch fuer @mutable, weil bei MUTABLE die EMHEADER-Reihenfolge
nicht festliegt und Encoder-Bugs sonst stillschweigend passierten.
Implementations§
Source§impl<'a> MutableStructEncoder<'a>
impl<'a> MutableStructEncoder<'a>
Sourcepub fn new(writer: &'a mut BufferWriter, required_ids: Vec<u32>) -> Self
pub fn new(writer: &'a mut BufferWriter, required_ids: Vec<u32>) -> Self
Neuer Encoder. required_ids ist die Liste der Member-IDs,
die spec-konform alle emittiert werden MUESSEN (= alle
non-optional Member des Structs).
Sourcepub fn encode_member<F>(
&mut self,
member_id: u32,
must_understand: bool,
body: F,
) -> Result<(), EncodeError>
pub fn encode_member<F>( &mut self, member_id: u32, must_understand: bool, body: F, ) -> Result<(), EncodeError>
Member encoden. Verhalten wie encode_mutable_member, plus
Tracking der emittierten ID.
§Errors
Wie encode_mutable_member.
Sourcepub fn encode_member_lc<F>(
&mut self,
member_id: u32,
must_understand: bool,
lc: LengthCode,
body: F,
) -> Result<(), EncodeError>
pub fn encode_member_lc<F>( &mut self, member_id: u32, must_understand: bool, lc: LengthCode, body: F, ) -> Result<(), EncodeError>
Sourcepub fn finish(self) -> Result<(), EncodeError>
pub fn finish(self) -> Result<(), EncodeError>
Schliesst die Mutable-Sequenz ab und prueft, dass jede in
required_ids aufgelistete Member-ID auch emittiert wurde.
§Errors
MissingNonOptionalMember { member_id } mit der ersten
fehlenden ID (deterministisch in Reihenfolge der required_ids-
Liste).