{ "BUZZ" } [ B{ 0x80 0x02 } T{ enum f { { "FOO" 0 } { "BAR" 255 } { "BUZZ" 256 } } } bare> ] unit-test
{ B{ 0x80 0x02 } } [ "BUZZ" T{ enum f { { "FOO" 0 } { "BAR" 255 } { "BUZZ" 256 } } } >bare ] unit-test
+[ B{ 0x03 } T{ enum f { { "A" 0 } { "B" 1 } { "C" 2 } } } bare> ] [ invalid-enum? ] must-fail-with
+[ "D" T{ enum f { { "A" 0 } { "B" 1 } { "C" 2 } } } >bare ] [ invalid-enum? ] must-fail-with
+
! optional<u32>
{ f } [ B{ 0x00 } T{ optional f u32 } bare> ] unit-test
IN: bare
+ERROR: invalid-enum value ;
+
SINGLETONS: uint ;
SINGLETONS: int ;
SINGLETONS: u8 u16 u32 u64 ;
M: void write-bare 2drop ;
-M: enum write-bare values>> at uint write-bare ;
+M: enum write-bare
+ values>> ?at [ uint write-bare ] [ invalid-enum ] if ;
M: optional write-bare
over 1 0 ? u8 write-bare
M: void read-bare drop f ; ! XXX: this isn't right
-M: enum read-bare [ uint read-bare ] dip values>> value-at ;
+M: enum read-bare
+ [ uint read-bare ] dip values>> ?value-at
+ [ invalid-enum ] unless ;
M: optional read-bare
u8 read-bare 1 = [ type>> read-bare ] [ drop f ] if ;