@@ -119,11 +119,60 @@ pub struct BucketChecksum<'a> {
119119 pub priority : Option < BucketPriority > ,
120120 #[ serde( default ) ]
121121 pub count : Option < i64 > ,
122+ #[ serde(
123+ default ,
124+ deserialize_with = "BucketChecksum::deserialize_subscriptions"
125+ ) ]
126+ pub subscriptions : Option < Vec < i64 > > ,
122127 // #[serde(default)]
123128 // #[serde(deserialize_with = "deserialize_optional_string_to_i64")]
124129 // pub last_op_id: Option<i64>,
125130}
126131
132+ impl BucketChecksum < ' _ > {
133+ fn deserialize_subscriptions < ' de , D : serde:: Deserializer < ' de > > (
134+ deserializer : D ,
135+ ) -> Result < Option < Vec < i64 > > , D :: Error > {
136+ struct MyVisitor ;
137+
138+ impl < ' de > Visitor < ' de > for MyVisitor {
139+ type Value = Option < Vec < i64 > > ;
140+
141+ fn expecting ( & self , formatter : & mut core:: fmt:: Formatter ) -> core:: fmt:: Result {
142+ write ! ( formatter, "optional list of subscriptions" )
143+ }
144+
145+ fn visit_none < E > ( self ) -> Result < Self :: Value , E >
146+ where
147+ E : serde:: de:: Error ,
148+ {
149+ Ok ( None )
150+ }
151+
152+ fn visit_some < D > ( self , deserializer : D ) -> Result < Self :: Value , D :: Error >
153+ where
154+ D : serde:: Deserializer < ' de > ,
155+ {
156+ deserializer. deserialize_seq ( self )
157+ }
158+
159+ fn visit_seq < A > ( self , mut seq : A ) -> Result < Self :: Value , A :: Error >
160+ where
161+ A : serde:: de:: SeqAccess < ' de > ,
162+ {
163+ let mut result: Vec < i64 > = Vec :: new ( ) ;
164+ while let Some ( element) = seq. next_element :: < & ' de str > ( ) ? {
165+ result. push ( element. parse :: < i64 > ( ) . map_err ( serde:: de:: Error :: custom) ?) ;
166+ }
167+
168+ Ok ( Some ( result) )
169+ }
170+ }
171+
172+ deserializer. deserialize_option ( MyVisitor )
173+ }
174+ }
175+
127176#[ derive( Deserialize , Debug ) ]
128177pub struct DataLine < ' a > {
129178 #[ serde( borrow) ]
0 commit comments