pub struct ValueStreamWriter<'a> {
pub inner: &'a mut BufferWriter,
}Expand description
Stream-API fuer ValueBase-Wire-Marshalling (CDR §15.3.4).
Phase-1: API-Skelett, das zerodds_cdr::BufferReader/Writer wraped und
die value-tag-Logic anwendet (chunked encoding, repository-id-list).
Phase-2 wired die volle Spec-Konformitaet (truncatable, custom
marshaling, codeset).
Fields§
§inner: &'a mut BufferWriterInner-Writer.
Implementations§
Source§impl<'a> ValueStreamWriter<'a>
impl<'a> ValueStreamWriter<'a>
Sourcepub fn new(inner: &'a mut BufferWriter) -> Self
pub fn new(inner: &'a mut BufferWriter) -> Self
Konstruktor.
Sourcepub fn write_value_tag(
&mut self,
repository_id: &str,
) -> Result<(), EncodeError>
pub fn write_value_tag( &mut self, repository_id: &str, ) -> Result<(), EncodeError>
Schreibt einen value-tag (CDR §15.3.4.2). Format: 0x7FFFFF02 fuer single-repository-id, 0x7FFFFF06 fuer list-of-repository- ids, 0x00000000 fuer null-value.
§Errors
Encode-Fehler.
Sourcepub fn write_value_tag_multi(
&mut self,
repository_ids: &[&str],
) -> Result<(), EncodeError>
pub fn write_value_tag_multi( &mut self, repository_ids: &[&str], ) -> Result<(), EncodeError>
Schreibt einen value-tag mit multi-repository-id-Liste (CDR
§15.3.4.2). Wire-Tag = 0x7FFF_FF06 (list-of-repository-ids +
kein Chunked-Bit). Layout:
u32 tag = 0x7FFFFF06
i32 count // > 0
string id[0] .. id[N-1] // CDR-strings (length + bytes + NUL)§Errors
Encode-Fehler oder leere repository_ids (Spec verlangt N >= 1).
Sourcepub fn write_chunked_value_tag(
&mut self,
repository_ids: &[&str],
) -> Result<(), EncodeError>
pub fn write_chunked_value_tag( &mut self, repository_ids: &[&str], ) -> Result<(), EncodeError>
Schreibt einen Chunked-Value-Tag (CDR §15.3.4.2 + §15.3.4.3 — “chunked encoding”). Wire-Tag = 0x7FFF_FF0A (chunked-flag + multi-repo-id-flag, beide gesetzt).
Nach dem Tag folgen:
i32 count+string id[N](multi-repo-id-list).- Pro Chunk:
i32 chunk_size_bytes+octet chunk_data[..]. - Zum Schluss:
i32 end_tag = -<nesting_level>(Spec §15.3.4.3 negative-Level-Marker).
Diese Funktion schreibt den Tag-Header + Repo-IDs; die
Caller-Layer schreibt jeden Chunk via Self::write_chunk und
schliesst den ValueType mit Self::write_chunked_end.
§Errors
Encode-Fehler oder leere Repo-IDs.
Sourcepub fn write_chunk(&mut self, chunk_data: &[u8]) -> Result<(), EncodeError>
pub fn write_chunk(&mut self, chunk_data: &[u8]) -> Result<(), EncodeError>
Schreibt einen einzelnen Chunk innerhalb eines chunked-encoded
Value (CDR §15.3.4.3): i32 chunk_size + raw bytes.
§Errors
Encode-Fehler.
Sourcepub fn write_chunked_end(
&mut self,
nesting_level: u32,
) -> Result<(), EncodeError>
pub fn write_chunked_end( &mut self, nesting_level: u32, ) -> Result<(), EncodeError>
Schreibt den End-Tag eines chunked-encoded Value (Spec
§15.3.4.3 — i32 end_tag = -<nesting_level> mit
nesting_level >= 1 fuer den outermost Value).
§Errors
Encode-Fehler oder nesting_level == 0.