forked from real-logic/simple-binary-encoding
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Michael Ward
committed
Apr 5, 2024
1 parent
ebec8ab
commit a088c5f
Showing
6 changed files
with
82 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
use issue_984::{ | ||
message_header_codec::MessageHeaderDecoder, | ||
simple_message_codec::{encoder::MyGroupEncoder, *}, | ||
*, | ||
}; | ||
|
||
fn create_encoder(buffer: &mut Vec<u8>) -> SimpleMessageEncoder { | ||
let simple_msg = SimpleMessageEncoder::default().wrap( | ||
WriteBuf::new(buffer.as_mut_slice()), | ||
message_header_codec::ENCODED_LENGTH, | ||
); | ||
let mut header = simple_msg.header(0); | ||
header.parent().unwrap() | ||
} | ||
|
||
#[test] | ||
fn round_trip() -> SbeResult<()> { | ||
// encode... | ||
let mut buffer = vec![0u8; 256]; | ||
let mut simple_msg_encoder = create_encoder(&mut buffer); | ||
simple_msg_encoder.id(1985); | ||
|
||
let mut my_grp_encoder = simple_msg_encoder.my_group_encoder(1, MyGroupEncoder::default()); | ||
my_grp_encoder.advance()?; | ||
my_grp_encoder.f1(&[1, 2, 3, 4]); | ||
my_grp_encoder.f2(&[1, 2, 3, 4, 5]); | ||
my_grp_encoder.f3(&[1, 2, 3, 4, 5, 6]); | ||
|
||
// decode... | ||
let buf = ReadBuf::new(buffer.as_slice()); | ||
let header = MessageHeaderDecoder::default().wrap(buf, 0); | ||
assert_eq!(SBE_BLOCK_LENGTH, header.block_length()); | ||
assert_eq!(SBE_SCHEMA_VERSION, header.version()); | ||
assert_eq!(SBE_TEMPLATE_ID, header.template_id()); | ||
assert_eq!(SBE_SCHEMA_ID, header.schema_id()); | ||
|
||
let simple_msg_decoder = SimpleMessageDecoder::default().header(header); | ||
assert_eq!(1985, simple_msg_decoder.id()); | ||
let mut grp_decoder = simple_msg_decoder.my_group_decoder(); | ||
assert_eq!(1, grp_decoder.count()); | ||
grp_decoder.advance()?; | ||
|
||
assert_eq!([1, 2, 3, 4], grp_decoder.f1()); | ||
assert_eq!([1, 2, 3, 4, 5], grp_decoder.f2()); | ||
assert_eq!([1, 2, 3, 4, 5, 6], grp_decoder.f3()); | ||
Ok(()) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
<sbe:messageSchema | ||
xmlns:sbe="http://fixprotocol.io/2016/sbe" | ||
package="issue984" | ||
id="984" | ||
version="3" | ||
semanticVersion="5.0.0" | ||
byteOrder="littleEndian"> | ||
<types> | ||
<type name="String4" length="4" primitiveType="char" semanticType="String"/> | ||
<type name="String5" length="5" primitiveType="char" sinceVersion="2" semanticType="String"/> | ||
<type name="String6" length="6" primitiveType="char" sinceVersion="3" semanticType="String"/> | ||
<composite name="groupSize" description="Repeating group dimensions" semanticType="NumInGroup"> | ||
<type name="blockLength" primitiveType="uint16"/> | ||
<type name="numInGroup" primitiveType="uint8"/> | ||
</composite> | ||
<composite name="messageHeader"> | ||
<type name="blockLength" primitiveType="uint16"/> | ||
<type name="templateId" primitiveType="uint16" description="Template ID used to encode the message."/> | ||
<type name="schemaId" primitiveType="uint16" description="ID of the system publishing the message."/> | ||
<type name="version" primitiveType="uint16" description="Schema version."/> | ||
</composite> | ||
</types> | ||
<sbe:message name="SimpleMessage" id="1"> | ||
<field name="id" id="2" type="uint16" semanticType="Int"/> | ||
<group name="MyGroup" id="3" blockLength="15" dimensionType="groupSize"> | ||
<field name="f1" id="4" type="String4" offset="0" semanticType="String"/> | ||
<field name="f2" id="5" type="String5" offset="4" semanticType="String"/> | ||
<field name="f3" id="6" type="String6" offset="9" semanticType="String"/> | ||
</group> | ||
</sbe:message> | ||
</sbe:messageSchema> |