@@ -227,3 +227,47 @@ fn test_id_pat_with_id() {
227227 assert_eq ! ( v, IdPatBitsTuple :: B ( ( 0 , 1 ) ) ) ;
228228 assert_eq ! ( input, & * v. to_bytes( ) . unwrap( ) ) ;
229229}
230+
231+ #[ test]
232+ fn test_litbool_as_id ( ) {
233+ use deku:: prelude:: * ;
234+
235+ #[ derive( DekuRead , DekuWrite , Debug , PartialEq , Eq ) ]
236+ pub struct A {
237+ #[ deku( bits = 1 ) ]
238+ bit : bool ,
239+ #[ deku( ctx = "*bit" ) ]
240+ var : Var ,
241+ }
242+
243+ #[ derive( DekuRead , DekuWrite , Debug , PartialEq , Eq ) ]
244+ #[ deku( id = "bit" , ctx = "bit: bool" ) ]
245+ pub enum Var {
246+ #[ deku( id = false ) ]
247+ False ( #[ deku( bits = 15 ) ] u16 ) ,
248+ #[ deku( id = true ) ]
249+ True ( #[ deku( bits = 15 ) ] u16 ) ,
250+ }
251+ let input = [ 0b1000_0000 , 0xff ] ;
252+ let mut cursor = Cursor :: new ( input) ;
253+ let ( _, v) = A :: from_reader ( ( & mut cursor, 0 ) ) . unwrap ( ) ;
254+ assert_eq ! (
255+ v,
256+ A {
257+ bit: true ,
258+ var: Var :: True ( 0x7f01 ) ,
259+ }
260+ ) ;
261+ assert_eq ! ( input, & * v. to_bytes( ) . unwrap( ) ) ;
262+ let input = [ 0b0000_0000 , 0xff ] ;
263+ let mut cursor = Cursor :: new ( input) ;
264+ let ( _, v) = A :: from_reader ( ( & mut cursor, 0 ) ) . unwrap ( ) ;
265+ assert_eq ! (
266+ v,
267+ A {
268+ bit: false ,
269+ var: Var :: False ( 0x7f01 ) ,
270+ }
271+ ) ;
272+ assert_eq ! ( input, & * v. to_bytes( ) . unwrap( ) ) ;
273+ }
0 commit comments