[Rust] cumulate offset of header and message_header_codec::ENCODED_LENGTH in generated Decoder::header method (original) (raw)
Code generator for rust would generate a header method for Decoder (see following)
impl<'a> DonotUsePlaceHolderDecoder<'a> { pub fn wrap( mut self, buf: ReadBuf<'a>, offset: usize, acting_block_length: u16, acting_version: u16, ) -> Self { let limit = offset + acting_block_length as usize; self.buf = buf; self.initial_offset = offset; self.offset = offset; self.limit = limit; self.acting_block_length = acting_block_length; self.acting_version = acting_version; self }
#[inline]
pub fn encoded_length(&self) -> usize {
self.limit - self.offset
}
pub fn header(self, mut header: MessageHeaderDecoder<ReadBuf<'a>>) -> Self {
debug_assert_eq!(SBE_TEMPLATE_ID, header.template_id());
let acting_block_length = header.block_length();
let acting_version = header.version();
self.wrap(
header.parent().unwrap(),
message_header_codec::ENCODED_LENGTH,
acting_block_length,
acting_version,
)
}}
The header method take a header decoder and call wrap method, passing message_header_codec::ENCODED_LENGTH as offset.
Considering a header decoder may be wraped with a none-zero offset header_off, header method should wrap with header_off + message_header_codec::ENCODED_LENGTH. To support this functionality, a MessageHeaderDecoder should expose its offset via, say get_limit() or something else.