17
17
// cargo run --example sv2_frame
18
18
// ```
19
19
20
- use binary_sv2:: { binary_codec_sv2, Serialize } ;
20
+ use binary_sv2:: { binary_codec_sv2, Deserialize , Serialize } ;
21
21
use framing_sv2:: framing:: Sv2Frame ;
22
+ use std:: convert:: TryInto ;
22
23
23
24
// Example message type (e.g., SetupConnection)
24
25
const MSG_TYPE : u8 = 1 ;
25
26
// Example extension type (e.g., a standard Sv2 message)
26
27
const EXT_TYPE : u16 = 0x0001 ;
27
28
28
- #[ derive( Serialize , Debug ) ]
29
+ #[ derive( Serialize , Deserialize , Debug , Clone ) ]
29
30
pub struct CustomMessage {
30
- pub data : u32 ,
31
+ pub nonce : u32 ,
31
32
}
32
33
33
34
fn main ( ) {
34
35
// Create the message payload
35
- let message = CustomMessage { data : 42 } ;
36
+ let message = CustomMessage { nonce : 42 } ;
36
37
37
38
// Create the frame from the message
38
39
let frame: Sv2Frame < CustomMessage , Vec < u8 > > =
39
- Sv2Frame :: from_message ( message, MSG_TYPE , EXT_TYPE , false )
40
+ Sv2Frame :: from_message ( message. clone ( ) , MSG_TYPE , EXT_TYPE , false )
40
41
. expect ( "Failed to frame the message" ) ;
41
42
42
- // How header information is accessed
43
- let header = frame. get_header ( ) . expect ( "Frame has no header" ) ;
44
- assert_eq ! ( header. msg_type( ) , MSG_TYPE ) ;
45
- assert_eq ! ( header. ext_type( ) , EXT_TYPE ) ;
46
-
47
43
// Serialize the frame into a byte array for transmission
48
44
let mut serialized_frame = vec ! [ 0u8 ; frame. encoded_length( ) ] ;
49
45
frame
@@ -54,6 +50,15 @@ fn main() {
54
50
let mut deserialized_frame = Sv2Frame :: < CustomMessage , Vec < u8 > > :: from_bytes ( serialized_frame)
55
51
. expect ( "Failed to deserialize frame" ) ;
56
52
57
- assert_eq ! ( deserialized_frame. encoded_length( ) , 10 ) ; // 6 header bytes + 4 payload bytes
58
- assert_eq ! ( deserialized_frame. payload( ) , [ 42 , 0 , 0 , 0 ] ) ;
53
+ // Assert that deserialized header has the original content
54
+ let deserialized_header = deserialized_frame
55
+ . get_header ( )
56
+ . expect ( "Frame has no header" ) ;
57
+ assert_eq ! ( deserialized_header. msg_type( ) , MSG_TYPE ) ;
58
+ assert_eq ! ( deserialized_header. ext_type( ) , EXT_TYPE ) ;
59
+
60
+ // Assert that deserialized message has the original content
61
+ let deserialized_message: CustomMessage = binary_sv2:: from_bytes ( deserialized_frame. payload ( ) )
62
+ . expect ( "Failed to extract the message from the payload" ) ;
63
+ assert_eq ! ( deserialized_message. nonce, message. nonce) ;
59
64
}
0 commit comments