@@ -1301,3 +1301,42 @@ impl<'de, T: Deserialize<'de>, const CAP: usize> Deserialize<'de> for ArrayVec<T
1301
1301
deserializer. deserialize_seq ( ArrayVecVisitor :: < T , CAP > ( PhantomData ) )
1302
1302
}
1303
1303
}
1304
+
1305
+ #[ cfg( feature = "borsh" ) ]
1306
+ /// Requires crate feature `"borsh"`
1307
+ impl < T , const CAP : usize > borsh:: BorshSerialize for ArrayVec < T , CAP >
1308
+ where
1309
+ T : borsh:: BorshSerialize ,
1310
+ {
1311
+ fn serialize < W : borsh:: io:: Write > ( & self , writer : & mut W ) -> borsh:: io:: Result < ( ) > {
1312
+ let vs = self . as_slice ( ) ;
1313
+ <usize as borsh:: BorshSerialize >:: serialize ( & vs. len ( ) , writer) ?;
1314
+ for elem in vs {
1315
+ <T as borsh:: BorshSerialize >:: serialize ( elem, writer) ?;
1316
+ }
1317
+ Ok ( ( ) )
1318
+ }
1319
+ }
1320
+
1321
+ #[ cfg( feature = "borsh" ) ]
1322
+ /// Requires crate feature `"borsh"`
1323
+ impl < T , const CAP : usize > borsh:: BorshDeserialize for ArrayVec < T , CAP >
1324
+ where
1325
+ T : borsh:: BorshDeserialize ,
1326
+ {
1327
+ fn deserialize_reader < R : borsh:: io:: Read > ( reader : & mut R ) -> borsh:: io:: Result < Self > {
1328
+ let mut values = Self :: new ( ) ;
1329
+ let len = <usize as borsh:: BorshDeserialize >:: deserialize_reader ( reader) ?;
1330
+ for _ in 0 ..len {
1331
+ let elem = <T as borsh:: BorshDeserialize >:: deserialize_reader ( reader) ?;
1332
+ if let Err ( _) = values. try_push ( elem) {
1333
+ return Err ( borsh:: io:: Error :: new (
1334
+ borsh:: io:: ErrorKind :: InvalidData ,
1335
+ format ! ( "expected an array with no more than {} items" , CAP ) ,
1336
+ ) ) ;
1337
+ }
1338
+ }
1339
+
1340
+ Ok ( values)
1341
+ }
1342
+ }
0 commit comments