@@ -98,44 +98,86 @@ impl<T: TreeSchema, const N: usize> TreeSchema for [T; N] {
9898 const SCHEMA : & ' static Schema = & Schema :: homogeneous ( Homogeneous :: new ( N , T :: SCHEMA ) ) ;
9999}
100100
101+ fn serialize_by_key_slice < T : TreeSerialize , S : Serializer > (
102+ values : & [ T ] ,
103+ schema : & ' static Schema ,
104+ mut keys : impl Keys ,
105+ ser : S ,
106+ ) -> Result < S :: Ok , SerdeError < S :: Error > > {
107+ values[ schema. next ( & mut keys) ?] . serialize_by_key ( keys, ser)
108+ }
109+
110+ fn deserialize_by_key_slice < ' de , T : TreeDeserialize < ' de > , D : Deserializer < ' de > > (
111+ values : & mut [ T ] ,
112+ schema : & ' static Schema ,
113+ mut keys : impl Keys ,
114+ de : D ,
115+ ) -> Result < ( ) , SerdeError < D :: Error > > {
116+ values[ schema. next ( & mut keys) ?] . deserialize_by_key ( keys, de)
117+ }
118+
119+ fn probe_by_key_slice < ' de , T : TreeDeserialize < ' de > , D : Deserializer < ' de > > (
120+ schema : & ' static Schema ,
121+ mut keys : impl Keys ,
122+ de : D ,
123+ ) -> Result < ( ) , SerdeError < D :: Error > > {
124+ schema. next ( & mut keys) ?;
125+ T :: probe_by_key ( keys, de)
126+ }
127+
128+ fn ref_any_by_key_slice < ' a , T : TreeAny > (
129+ values : & ' a [ T ] ,
130+ schema : & ' static Schema ,
131+ mut keys : impl Keys ,
132+ ) -> Result < & ' a dyn Any , ValueError > {
133+ values[ schema. next ( & mut keys) ?] . ref_any_by_key ( keys)
134+ }
135+
136+ fn mut_any_by_key_slice < ' a , T : TreeAny > (
137+ values : & ' a mut [ T ] ,
138+ schema : & ' static Schema ,
139+ mut keys : impl Keys ,
140+ ) -> Result < & ' a mut dyn Any , ValueError > {
141+ values[ schema. next ( & mut keys) ?] . mut_any_by_key ( keys)
142+ }
143+
101144impl < T : TreeSerialize , const N : usize > TreeSerialize for [ T ; N ]
102145where
103146 Self : TreeSchema ,
104147{
105148 fn serialize_by_key < S : Serializer > (
106149 & self ,
107- mut keys : impl Keys ,
150+ keys : impl Keys ,
108151 ser : S ,
109152 ) -> Result < S :: Ok , SerdeError < S :: Error > > {
110- self [ Self :: SCHEMA . next ( & mut keys ) ? ] . serialize_by_key ( keys, ser)
153+ serialize_by_key_slice ( self . as_slice ( ) , Self :: SCHEMA , keys, ser)
111154 }
112155}
113156
114157impl < ' de , T : TreeDeserialize < ' de > , const N : usize > TreeDeserialize < ' de > for [ T ; N ] {
115158 fn deserialize_by_key < D : Deserializer < ' de > > (
116159 & mut self ,
117- mut keys : impl Keys ,
160+ keys : impl Keys ,
118161 de : D ,
119162 ) -> Result < ( ) , SerdeError < D :: Error > > {
120- self [ Self :: SCHEMA . next ( & mut keys ) ? ] . deserialize_by_key ( keys, de)
163+ deserialize_by_key_slice ( self . as_mut_slice ( ) , Self :: SCHEMA , keys, de)
121164 }
122165
123166 fn probe_by_key < D : Deserializer < ' de > > (
124- mut keys : impl Keys ,
167+ keys : impl Keys ,
125168 de : D ,
126169 ) -> Result < ( ) , SerdeError < D :: Error > > {
127- Self :: SCHEMA . next ( & mut keys) ?;
128- T :: probe_by_key ( keys, de)
170+ probe_by_key_slice :: < T , _ > ( Self :: SCHEMA , keys, de)
129171 }
130172}
131173
132174impl < T : TreeAny , const N : usize > TreeAny for [ T ; N ] {
133- fn ref_any_by_key ( & self , mut keys : impl Keys ) -> Result < & dyn Any , ValueError > {
134- self [ Self :: SCHEMA . next ( & mut keys ) ? ] . ref_any_by_key ( keys)
175+ fn ref_any_by_key ( & self , keys : impl Keys ) -> Result < & dyn Any , ValueError > {
176+ ref_any_by_key_slice ( self . as_slice ( ) , Self :: SCHEMA , keys)
135177 }
136178
137- fn mut_any_by_key ( & mut self , mut keys : impl Keys ) -> Result < & mut dyn Any , ValueError > {
138- self [ Self :: SCHEMA . next ( & mut keys ) ? ] . mut_any_by_key ( keys)
179+ fn mut_any_by_key ( & mut self , keys : impl Keys ) -> Result < & mut dyn Any , ValueError > {
180+ mut_any_by_key_slice ( self . as_mut_slice ( ) , Self :: SCHEMA , keys)
139181 }
140182}
141183
0 commit comments