11use {
2+ crate :: {
3+ ifs:: wl_output:: OutputIdHash , rect:: Rect , sm:: sm_wire:: WireRect ,
4+ utils:: send_sync_rc:: SendSyncRc ,
5+ } ,
26 bincode:: { Deserializer , Options } ,
37 jay_config:: _private:: bincode_ops,
48 serde:: { Deserialize , Serialize } ,
1014pub enum DeserializeToplevelError {
1115 #[ error( "Could not deserialize the V0 component" ) ]
1216 DeserializeV0 ( #[ source] bincode:: Error ) ,
17+ #[ error( "Could not deserialize the V1 component" ) ]
18+ DeserializeV1 ( #[ source] bincode:: Error ) ,
1319}
1420
1521pub fn deserialize_toplevel ( data : & [ u8 ] ) -> Result < SmToplevelOut , DeserializeToplevelError > {
@@ -21,6 +27,9 @@ pub fn deserialize_toplevel(data: &[u8]) -> Result<SmToplevelOut, DeserializeTop
2127 }
2228 let mut wire = WireToplevel :: default ( ) ;
2329 wire. v0 = des ! ( DeserializeV0 ) ?;
30+ if wire. v0 . version >= 1 {
31+ wire. v1 = des ! ( DeserializeV1 ) ?;
32+ }
2433 Ok ( wire. into ( ) )
2534}
2635
@@ -31,13 +40,23 @@ pub fn serialize_toplevel(data: &mut Vec<u8>, tl: &SmToplevelIn) {
3140}
3241
3342#[ derive( Default ) ]
34- pub struct SmToplevelIn { }
43+ pub struct SmToplevelIn {
44+ pub output : Option < OutputIdHash > ,
45+ pub workspace : Option < SendSyncRc < String > > ,
46+ pub floating_pos : Option < Rect > ,
47+ }
3548
36- pub struct SmToplevelOut { }
49+ #[ derive( Default ) ]
50+ pub struct SmToplevelOut {
51+ pub output : Option < OutputIdHash > ,
52+ pub workspace : Option < String > ,
53+ pub floating_pos : Option < Rect > ,
54+ }
3755
3856#[ derive( Default , Serialize ) ]
3957struct WireToplevel < ' a > {
4058 v0 : WireToplevelV0 < ' a > ,
59+ v1 : WireToplevelV1 < ' a > ,
4160}
4261
4362#[ derive( Default , Serialize , Deserialize ) ]
@@ -46,19 +65,42 @@ struct WireToplevelV0<'a> {
4665 _phantom : PhantomData < & ' a ( ) > ,
4766}
4867
68+ #[ derive( Default , Serialize , Deserialize ) ]
69+ struct WireToplevelV1 < ' a > {
70+ output : Option < OutputIdHash > ,
71+ #[ serde( borrow) ]
72+ workspace : Option < & ' a str > ,
73+ floating_pos : Option < WireRect > ,
74+ }
75+
4976impl < ' a > From < & ' a SmToplevelIn > for WireToplevel < ' a > {
50- fn from ( _value : & ' a SmToplevelIn ) -> Self {
77+ fn from ( value : & ' a SmToplevelIn ) -> Self {
5178 Self {
5279 v0 : WireToplevelV0 {
53- version : 0 ,
80+ version : 1 ,
5481 _phantom : Default :: default ( ) ,
5582 } ,
83+ v1 : value. into ( ) ,
84+ }
85+ }
86+ }
87+
88+ impl < ' a > From < & ' a SmToplevelIn > for WireToplevelV1 < ' a > {
89+ fn from ( value : & ' a SmToplevelIn ) -> Self {
90+ Self {
91+ output : value. output ,
92+ workspace : value. workspace . as_deref ( ) . map ( |v| & * * v) ,
93+ floating_pos : value. floating_pos . map ( Into :: into) ,
5694 }
5795 }
5896}
5997
6098impl From < WireToplevel < ' _ > > for SmToplevelOut {
61- fn from ( _value : WireToplevel < ' _ > ) -> Self {
62- Self { }
99+ fn from ( value : WireToplevel < ' _ > ) -> Self {
100+ Self {
101+ output : value. v1 . output ,
102+ workspace : value. v1 . workspace . map ( Into :: into) ,
103+ floating_pos : value. v1 . floating_pos . map ( Into :: into) ,
104+ }
63105 }
64106}
0 commit comments