22use serde:: { Deserialize , Deserializer , Serialize , Serializer } ;
33use {
44 borsh:: { BorshDeserialize , BorshSerialize } ,
5- solana_program:: pubkey:: Pubkey ,
5+ solana_program:: { pubkey:: Pubkey , short_vec } ,
66} ;
77
88struct ShortU16 ( u16 ) ;
@@ -79,7 +79,7 @@ impl<T: Serialize> Serialize for ShortVec<T> {
7979 where
8080 S : Serializer ,
8181 {
82- solana_program :: short_vec:: serialize ( & self . 0 , serializer)
82+ short_vec:: serialize ( & self . 0 , serializer)
8383 }
8484}
8585
@@ -89,16 +89,31 @@ impl<'de, T: Deserialize<'de>> Deserialize<'de> for ShortVec<T> {
8989 where
9090 D : Deserializer < ' de > ,
9191 {
92- solana_program :: short_vec:: deserialize ( deserializer) . map ( ShortVec )
92+ short_vec:: deserialize ( deserializer) . map ( ShortVec )
9393 }
9494}
9595
9696#[ cfg_attr( feature = "serde" , derive( Serialize , Deserialize ) ) ]
97- #[ derive( BorshDeserialize , BorshSerialize , Clone , Debug , Eq , PartialEq ) ]
97+ #[ derive( Clone , Debug , Eq , PartialEq ) ]
9898pub struct ConfigKeys {
9999 /// Each key tuple comprises a unique `Pubkey` identifier,
100100 /// and `bool` whether that key is a signer of the data.
101- pub keys : ShortVec < ( Pubkey , bool ) > ,
101+ #[ serde( with = "short_vec" ) ]
102+ pub keys : Vec < ( Pubkey , bool ) > ,
103+ }
104+
105+ impl BorshSerialize for ConfigKeys {
106+ fn serialize < W : std:: io:: Write > ( & self , writer : & mut W ) -> std:: io:: Result < ( ) > {
107+ BorshSerialize :: serialize ( & self . keys , writer)
108+ }
109+ }
110+
111+ impl BorshDeserialize for ConfigKeys {
112+ fn deserialize_reader < R : std:: io:: Read > ( reader : & mut R ) -> std:: io:: Result < Self > {
113+ Ok ( ConfigKeys {
114+ keys : ShortVec :: deserialize_reader ( reader) ?. 0 ,
115+ } )
116+ }
102117}
103118
104119/// Utility for extracting the `ConfigKeys` data from the account data.
@@ -115,7 +130,7 @@ mod tests {
115130 use { super :: * , assert_matches:: assert_matches, bincode:: serialize} ;
116131 use {
117132 bincode:: deserialize,
118- solana_program :: short_vec:: { decode_shortu16_len, ShortU16 } ,
133+ short_vec:: { decode_shortu16_len, ShortU16 } ,
119134 } ;
120135
121136 /// Return the serialized length.
0 commit comments