1use super::MockDashPlatformSdk;
2use dpp::balances::total_single_token_balance::TotalSingleTokenBalance;
3use dpp::bincode::config::standard;
4use dpp::address_funds::PlatformAddress;
5use dpp::data_contract::associated_token::token_perpetual_distribution::reward_distribution_moment::RewardDistributionMoment;
6use dpp::data_contract::group::Group;
7use dpp::group::group_action::GroupAction;
8use dpp::tokens::contract_info::TokenContractInfo;
9use dpp::tokens::info::IdentityTokenInfo;
10use dpp::tokens::status::TokenStatus;
11use dpp::tokens::token_pricing_schedule::TokenPricingSchedule;
12use dpp::{
13 bincode,
14 block::{extended_epoch_info::ExtendedEpochInfo, finalized_epoch_info::FinalizedEpochInfo},
15 dashcore::{hashes::Hash as CoreHash, ProTxHash},
16 document::{serialization_traits::DocumentCborMethodsV0, Document},
17 identifier::Identifier,
18 identity::{identities_contract_keys::IdentitiesContractKeys, IdentityPublicKey},
19 platform_serialization::{platform_encode_to_vec, platform_versioned_decode_from_slice},
20 prelude::{DataContract, Identity},
21 serialization::{
22 PlatformDeserializableWithPotentialValidationFromVersionedStructure,
23 PlatformSerializableWithPlatformVersion,
24 },
25 voting::votes::{resource_vote::ResourceVote, Vote},
26};
27use drive::grovedb::Element;
28use drive_proof_verifier::types::evonode_status::EvoNodeStatus;
29use drive_proof_verifier::types::groups::GroupActions;
30use drive_proof_verifier::types::identity_token_balance::{
31 IdentitiesTokenBalances, IdentityTokenBalances,
32};
33use drive_proof_verifier::types::token_info::{IdentitiesTokenInfos, IdentityTokenInfos};
34use drive_proof_verifier::types::token_status::TokenStatuses;
35use drive::grovedb::GroveTrunkQueryResult;
36use drive_proof_verifier::types::{
37 AddressInfo, Contenders, ContestedResources, CurrentQuorumsInfo, ElementFetchRequestItem,
38 IdentityBalanceAndRevision, IndexMap, MasternodeProtocolVote, MostRecentShieldedAnchor,
39 PlatformAddressTrunkState, PrefundedSpecializedBalance, ProposerBlockCounts,
40 RecentAddressBalanceChanges, RecentCompactedAddressBalanceChanges, RetrievedValues,
41 ShieldedAnchors, ShieldedEncryptedNote, ShieldedEncryptedNotes, ShieldedNotesCount,
42 ShieldedNullifierStatus, ShieldedNullifierStatuses, ShieldedPoolState,
43 TokenPreProgrammedDistributions, TotalCreditsInPlatform, VotePollsGroupedByTimestamp, Voters,
44};
45use std::{collections::BTreeMap, hash::Hash};
46
47static BINCODE_CONFIG: bincode::config::Configuration = bincode::config::standard();
48
49pub trait MockResponse {
55 fn mock_serialize(&self, mock_sdk: &MockDashPlatformSdk) -> Vec<u8>;
61
62 fn mock_deserialize(mock_sdk: &MockDashPlatformSdk, buf: &[u8]) -> Self
68 where
69 Self: Sized;
70}
71
72impl<T: MockResponse> MockResponse for Option<T> {
73 fn mock_deserialize(mock_sdk: &MockDashPlatformSdk, buf: &[u8]) -> Self
74 where
75 Self: Sized,
76 {
77 if buf.is_empty() {
78 return None;
79 }
80
81 Some(T::mock_deserialize(mock_sdk, buf))
82 }
83 fn mock_serialize(&self, mock_sdk: &MockDashPlatformSdk) -> Vec<u8> {
84 match self {
85 Some(item) => item.mock_serialize(mock_sdk),
86 None => vec![],
87 }
88 }
89}
90
91impl<T: MockResponse> MockResponse for Vec<T> {
92 fn mock_deserialize(mock_sdk: &MockDashPlatformSdk, buf: &[u8]) -> Self
93 where
94 Self: Sized,
95 {
96 let items: Vec<Vec<u8>> = bincode::decode_from_slice(buf, BINCODE_CONFIG)
97 .expect("decode vec of data")
98 .0;
99 items
100 .into_iter()
101 .map(|item| T::mock_deserialize(mock_sdk, &item))
102 .collect()
103 }
104
105 fn mock_serialize(&self, mock_sdk: &MockDashPlatformSdk) -> Vec<u8> {
106 let data: Vec<Vec<u8>> = self
107 .iter()
108 .map(|item| item.mock_serialize(mock_sdk))
109 .collect();
110
111 bincode::encode_to_vec(data, BINCODE_CONFIG).expect("encode vec of data")
112 }
113}
114
115impl<K: Ord + MockResponse, V: MockResponse> MockResponse for BTreeMap<K, V> {
116 fn mock_deserialize(sdk: &MockDashPlatformSdk, buf: &[u8]) -> Self
117 where
118 Self: Sized,
119 {
120 let (data, _): (BTreeMap<Vec<u8>, Vec<u8>>, _) =
121 bincode::decode_from_slice(buf, BINCODE_CONFIG).expect("decode BTreeMap");
122
123 data.into_iter()
124 .map(|(k, v)| (K::mock_deserialize(sdk, &k), V::mock_deserialize(sdk, &v)))
125 .collect()
126 }
127
128 fn mock_serialize(&self, sdk: &MockDashPlatformSdk) -> Vec<u8> {
129 let data: BTreeMap<Vec<u8>, Vec<u8>> = self
130 .iter()
131 .map(|(k, v)| (k.mock_serialize(sdk), v.mock_serialize(sdk)))
132 .collect();
133
134 bincode::encode_to_vec(data, BINCODE_CONFIG).expect("encode BTreeMap")
135 }
136}
137
138impl<K: Hash + Eq + MockResponse, V: MockResponse> MockResponse for IndexMap<K, V> {
139 fn mock_deserialize(sdk: &MockDashPlatformSdk, buf: &[u8]) -> Self
140 where
141 Self: Sized,
142 {
143 let (data, _): (IndexMap<Vec<u8>, Vec<u8>>, _) =
144 bincode::serde::decode_from_slice(buf, BINCODE_CONFIG).expect("decode IndexMap");
145
146 data.into_iter()
147 .map(|(k, v)| (K::mock_deserialize(sdk, &k), V::mock_deserialize(sdk, &v)))
148 .collect()
149 }
150
151 fn mock_serialize(&self, sdk: &MockDashPlatformSdk) -> Vec<u8> {
152 let data: IndexMap<Vec<u8>, Vec<u8>> = self
153 .iter()
154 .map(|(k, v)| (k.mock_serialize(sdk), v.mock_serialize(sdk)))
155 .collect();
156
157 bincode::serde::encode_to_vec(data, BINCODE_CONFIG).expect("encode IndexMap")
158 }
159}
160
161macro_rules! impl_mock_response {
165 ($name:ident) => {
166 impl MockResponse for $name {
167 fn mock_serialize(&self, sdk: &MockDashPlatformSdk) -> Vec<u8> {
168 platform_encode_to_vec(self, BINCODE_CONFIG, sdk.version())
169 .expect(concat!("encode ", stringify!($name)))
170 }
171 fn mock_deserialize(sdk: &MockDashPlatformSdk, buf: &[u8]) -> Self
172 where
173 Self: Sized,
174 {
175 platform_versioned_decode_from_slice(buf, BINCODE_CONFIG, sdk.version())
176 .expect(concat!("decode ", stringify!($name)))
177 }
178 }
179 };
180}
181
182impl MockResponse for DataContract {
185 fn mock_serialize(&self, sdk: &MockDashPlatformSdk) -> Vec<u8> {
186 self.serialize_to_bytes_with_platform_version(sdk.version())
187 .expect("encode data")
188 }
189
190 fn mock_deserialize(sdk: &MockDashPlatformSdk, buf: &[u8]) -> Self
191 where
192 Self: Sized,
193 {
194 DataContract::versioned_deserialize(buf, true, sdk.version()).expect("decode data")
195 }
196}
197
198impl MockResponse for (DataContract, Vec<u8>) {
201 fn mock_serialize(&self, _sdk: &MockDashPlatformSdk) -> Vec<u8> {
202 self.1.clone()
203 }
204
205 fn mock_deserialize(sdk: &MockDashPlatformSdk, buf: &[u8]) -> Self
206 where
207 Self: Sized,
208 {
209 (
210 DataContract::versioned_deserialize(buf, true, sdk.version()).expect("decode data"),
211 buf.to_vec(),
212 )
213 }
214}
215
216impl MockResponse for Document {
219 fn mock_serialize(&self, _sdk: &MockDashPlatformSdk) -> Vec<u8> {
220 self.to_cbor().expect("encode data")
221 }
222
223 fn mock_deserialize(sdk: &MockDashPlatformSdk, buf: &[u8]) -> Self
224 where
225 Self: Sized,
226 {
227 Self::from_cbor(buf, None, None, sdk.version()).expect("decode data")
228 }
229}
230
231impl MockResponse for Element {
232 fn mock_serialize(&self, _sdk: &MockDashPlatformSdk) -> Vec<u8> {
233 let config = standard();
235
236 bincode::encode_to_vec(self, config).expect("Failed to serialize Element")
238 }
239
240 fn mock_deserialize(_sdk: &MockDashPlatformSdk, buf: &[u8]) -> Self
241 where
242 Self: Sized,
243 {
244 let config = standard();
246
247 bincode::decode_from_slice(buf, config)
249 .expect("Failed to deserialize Element")
250 .0
251 }
252}
253
254impl MockResponse for drive_proof_verifier::types::IdentityNonceFetcher {
255 fn mock_serialize(&self, _sdk: &MockDashPlatformSdk) -> Vec<u8> {
256 self.0.to_be_bytes().to_vec()
257 }
258
259 fn mock_deserialize(_sdk: &MockDashPlatformSdk, buf: &[u8]) -> Self
260 where
261 Self: Sized,
262 {
263 drive_proof_verifier::types::IdentityNonceFetcher(u64::from_be_bytes(
264 buf.try_into()
265 .expect("identity contract nonce should be should be 8 bytes"),
266 ))
267 }
268}
269
270impl MockResponse for drive_proof_verifier::types::IdentityContractNonceFetcher {
271 fn mock_serialize(&self, _sdk: &MockDashPlatformSdk) -> Vec<u8> {
272 self.0.to_be_bytes().to_vec()
273 }
274
275 fn mock_deserialize(_sdk: &MockDashPlatformSdk, buf: &[u8]) -> Self
276 where
277 Self: Sized,
278 {
279 drive_proof_verifier::types::IdentityContractNonceFetcher(u64::from_be_bytes(
280 buf.try_into()
281 .expect("identity contract nonce should be should be 8 bytes"),
282 ))
283 }
284}
285impl MockResponse for ProTxHash {
286 fn mock_serialize(&self, sdk: &MockDashPlatformSdk) -> Vec<u8> {
287 let data = self.as_raw_hash().as_byte_array();
288 platform_encode_to_vec(data, BINCODE_CONFIG, sdk.version()).expect("encode ProTxHash")
289 }
290 fn mock_deserialize(sdk: &MockDashPlatformSdk, buf: &[u8]) -> Self
291 where
292 Self: Sized,
293 {
294 let data = platform_versioned_decode_from_slice(buf, BINCODE_CONFIG, sdk.version())
295 .expect("decode ProTxHash");
296 ProTxHash::from_raw_hash(CoreHash::from_byte_array(data))
297 }
298}
299
300impl MockResponse for ProposerBlockCounts {
301 fn mock_serialize(&self, sdk: &MockDashPlatformSdk) -> Vec<u8> {
302 self.0.mock_serialize(sdk)
303 }
304
305 fn mock_deserialize(sdk: &MockDashPlatformSdk, buf: &[u8]) -> Self
306 where
307 Self: Sized,
308 {
309 let data = RetrievedValues::<Identifier, u64>::mock_deserialize(sdk, buf);
310 ProposerBlockCounts(data)
311 }
312}
313
314impl MockResponse for IdentityTokenBalances {
315 fn mock_serialize(&self, sdk: &MockDashPlatformSdk) -> Vec<u8> {
316 self.0.mock_serialize(sdk)
317 }
318
319 fn mock_deserialize(sdk: &MockDashPlatformSdk, buf: &[u8]) -> Self
320 where
321 Self: Sized,
322 {
323 let map = RetrievedValues::mock_deserialize(sdk, buf);
324 Self(map)
325 }
326}
327
328impl MockResponse for IdentitiesTokenBalances {
329 fn mock_serialize(&self, sdk: &MockDashPlatformSdk) -> Vec<u8> {
330 self.0.mock_serialize(sdk)
331 }
332
333 fn mock_deserialize(sdk: &MockDashPlatformSdk, buf: &[u8]) -> Self
334 where
335 Self: Sized,
336 {
337 let map = RetrievedValues::mock_deserialize(sdk, buf);
338 Self(map)
339 }
340}
341
342impl MockResponse for IdentityTokenInfos {
343 fn mock_serialize(&self, sdk: &MockDashPlatformSdk) -> Vec<u8> {
344 let vec: Vec<(Identifier, Option<IdentityTokenInfo>)> =
346 self.0.iter().map(|(k, v)| (*k, v.clone())).collect();
347
348 platform_encode_to_vec(vec, BINCODE_CONFIG, sdk.version())
350 .expect(concat!("encode ", stringify!($name)))
351 }
352
353 fn mock_deserialize(sdk: &MockDashPlatformSdk, buf: &[u8]) -> Self
354 where
355 Self: Sized,
356 {
357 let vec: Vec<(Identifier, Option<IdentityTokenInfo>)> =
359 platform_versioned_decode_from_slice(buf, BINCODE_CONFIG, sdk.version())
360 .expect(concat!("decode ", stringify!($name)));
361
362 Self(RetrievedValues::from_iter(vec))
363 }
364}
365
366impl MockResponse for IdentitiesTokenInfos {
367 fn mock_serialize(&self, sdk: &MockDashPlatformSdk) -> Vec<u8> {
368 let vec: Vec<(Identifier, Option<IdentityTokenInfo>)> =
370 self.0.iter().map(|(k, v)| (*k, v.clone())).collect();
371
372 platform_encode_to_vec(vec, BINCODE_CONFIG, sdk.version())
374 .expect(concat!("encode ", stringify!($name)))
375 }
376
377 fn mock_deserialize(sdk: &MockDashPlatformSdk, buf: &[u8]) -> Self
378 where
379 Self: Sized,
380 {
381 let vec: Vec<(Identifier, Option<IdentityTokenInfo>)> =
383 platform_versioned_decode_from_slice(buf, BINCODE_CONFIG, sdk.version())
384 .expect(concat!("decode ", stringify!($name)));
385
386 Self(RetrievedValues::from_iter(vec))
387 }
388}
389
390impl MockResponse for TokenStatuses {
391 fn mock_serialize(&self, sdk: &MockDashPlatformSdk) -> Vec<u8> {
392 let vec: Vec<(Identifier, Option<TokenStatus>)> =
394 self.iter().map(|(k, v)| (*k, v.clone())).collect();
395
396 platform_encode_to_vec(vec, BINCODE_CONFIG, sdk.version())
398 .expect(concat!("encode ", stringify!($name)))
399 }
400
401 fn mock_deserialize(sdk: &MockDashPlatformSdk, buf: &[u8]) -> Self
402 where
403 Self: Sized,
404 {
405 let vec: Vec<(Identifier, Option<TokenStatus>)> =
407 platform_versioned_decode_from_slice(buf, BINCODE_CONFIG, sdk.version())
408 .expect(concat!("decode ", stringify!($name)));
409
410 RetrievedValues::from_iter(vec)
411 }
412}
413
414impl MockResponse for TokenContractInfo {
415 fn mock_serialize(&self, sdk: &MockDashPlatformSdk) -> Vec<u8> {
416 platform_encode_to_vec(self, BINCODE_CONFIG, sdk.version())
417 .expect("encode TokenContractInfo")
418 }
419
420 fn mock_deserialize(sdk: &MockDashPlatformSdk, buf: &[u8]) -> Self
421 where
422 Self: Sized,
423 {
424 platform_versioned_decode_from_slice(buf, BINCODE_CONFIG, sdk.version())
425 .expect("decode TokenContractInfo")
426 }
427}
428
429impl MockResponse for TotalSingleTokenBalance {
430 fn mock_serialize(&self, _sdk: &MockDashPlatformSdk) -> Vec<u8> {
431 bincode::encode_to_vec(self, BINCODE_CONFIG).expect("encode vec of data")
432 }
433
434 fn mock_deserialize(_sdk: &MockDashPlatformSdk, buf: &[u8]) -> Self
435 where
436 Self: Sized,
437 {
438 bincode::decode_from_slice(buf, BINCODE_CONFIG)
439 .expect("decode vec of data")
440 .0
441 }
442}
443
444impl MockResponse for GroupActions {
445 fn mock_serialize(&self, sdk: &MockDashPlatformSdk) -> Vec<u8> {
446 let vec: Vec<(Identifier, Option<GroupAction>)> =
448 self.iter().map(|(k, v)| (*k, v.clone())).collect();
449
450 platform_encode_to_vec(vec, BINCODE_CONFIG, sdk.version())
452 .expect(concat!("encode ", stringify!($name)))
453 }
454
455 fn mock_deserialize(sdk: &MockDashPlatformSdk, buf: &[u8]) -> Self
456 where
457 Self: Sized,
458 {
459 let vec: Vec<(Identifier, Option<GroupAction>)> =
461 platform_versioned_decode_from_slice(buf, BINCODE_CONFIG, sdk.version())
462 .expect(concat!("decode ", stringify!($name)));
463
464 RetrievedValues::from_iter(vec)
465 }
466}
467
468impl MockResponse for IdentitiesContractKeys {
469 fn mock_serialize(&self, _sdk: &MockDashPlatformSdk) -> Vec<u8> {
470 bincode::encode_to_vec(self, BINCODE_CONFIG).expect("encode IdentitiesContractKeys")
471 }
472
473 fn mock_deserialize(_sdk: &MockDashPlatformSdk, buf: &[u8]) -> Self
474 where
475 Self: Sized,
476 {
477 bincode::decode_from_slice(buf, BINCODE_CONFIG)
478 .expect("decode IdentitiesContractKeys")
479 .0
480 }
481}
482
483impl_mock_response!(Identity);
484impl_mock_response!(IdentityPublicKey);
485impl_mock_response!(Identifier);
486impl_mock_response!(MasternodeProtocolVote);
487impl_mock_response!(ResourceVote);
488impl_mock_response!(u8);
489impl_mock_response!(u16);
490impl_mock_response!(u32);
491impl_mock_response!(u64);
492impl_mock_response!(Vote);
493impl_mock_response!(ExtendedEpochInfo);
494impl_mock_response!(FinalizedEpochInfo);
495impl_mock_response!(ContestedResources);
496impl_mock_response!(IdentityBalanceAndRevision);
497impl_mock_response!(Contenders);
498impl_mock_response!(Voters);
499impl_mock_response!(VotePollsGroupedByTimestamp);
500impl_mock_response!(PrefundedSpecializedBalance);
501impl_mock_response!(TotalCreditsInPlatform);
502impl_mock_response!(ElementFetchRequestItem);
503impl_mock_response!(EvoNodeStatus);
504impl_mock_response!(CurrentQuorumsInfo);
505impl_mock_response!(Group);
506impl_mock_response!(TokenPricingSchedule);
507impl_mock_response!(RewardDistributionMoment);
508impl_mock_response!(TokenPreProgrammedDistributions);
509impl_mock_response!(PlatformAddress);
510impl_mock_response!(AddressInfo);
511impl_mock_response!(RecentAddressBalanceChanges);
512impl_mock_response!(RecentCompactedAddressBalanceChanges);
513impl_mock_response!(ShieldedPoolState);
514impl_mock_response!(ShieldedNotesCount);
515impl_mock_response!(ShieldedAnchors);
516impl_mock_response!(MostRecentShieldedAnchor);
517impl_mock_response!(ShieldedEncryptedNotes);
518impl_mock_response!(ShieldedEncryptedNote);
519impl_mock_response!(ShieldedNullifierStatuses);
520impl_mock_response!(ShieldedNullifierStatus);
521
522impl MockResponse for GroveTrunkQueryResult {
525 fn mock_serialize(&self, _sdk: &MockDashPlatformSdk) -> Vec<u8> {
526 unimplemented!("GroveTrunkQueryResult does not support mock serialization - the Tree type is not serializable")
527 }
528
529 fn mock_deserialize(_sdk: &MockDashPlatformSdk, _buf: &[u8]) -> Self
530 where
531 Self: Sized,
532 {
533 unimplemented!("GroveTrunkQueryResult does not support mock deserialization - the Tree type is not serializable")
534 }
535}
536
537impl MockResponse for PlatformAddressTrunkState {
540 fn mock_serialize(&self, _sdk: &MockDashPlatformSdk) -> Vec<u8> {
541 unimplemented!("PlatformAddressTrunkState does not support mock serialization - the Tree type is not serializable")
542 }
543
544 fn mock_deserialize(_sdk: &MockDashPlatformSdk, _buf: &[u8]) -> Self
545 where
546 Self: Sized,
547 {
548 unimplemented!("PlatformAddressTrunkState does not support mock deserialization - the Tree type is not serializable")
549 }
550}
551
552impl MockResponse for drive_proof_verifier::DocumentCount {
553 fn mock_serialize(&self, _sdk: &MockDashPlatformSdk) -> Vec<u8> {
554 let bincode_config = standard();
555 bincode::encode_to_vec(self.0, bincode_config).expect("encode DocumentCount")
556 }
557
558 fn mock_deserialize(_sdk: &MockDashPlatformSdk, buf: &[u8]) -> Self
559 where
560 Self: Sized,
561 {
562 let bincode_config = standard();
563 let (count, _): (u64, _) =
564 bincode::decode_from_slice(buf, bincode_config).expect("decode DocumentCount");
565 drive_proof_verifier::DocumentCount(count)
566 }
567}
568
569type DocumentSplitCountTriples = Vec<(Option<Vec<u8>>, Vec<u8>, Option<u64>)>;
577
578impl MockResponse for drive_proof_verifier::DocumentSplitCounts {
579 fn mock_serialize(&self, _sdk: &MockDashPlatformSdk) -> Vec<u8> {
580 let bincode_config = standard();
581 let triples: DocumentSplitCountTriples = self
588 .0
589 .iter()
590 .map(|e| (e.in_key.clone(), e.key.clone(), e.count))
591 .collect();
592 bincode::encode_to_vec(triples, bincode_config).expect("encode DocumentSplitCounts")
593 }
594
595 fn mock_deserialize(_sdk: &MockDashPlatformSdk, buf: &[u8]) -> Self
596 where
597 Self: Sized,
598 {
599 let bincode_config = standard();
600 let (triples, _): (DocumentSplitCountTriples, _) =
601 bincode::decode_from_slice(buf, bincode_config).expect("decode DocumentSplitCounts");
602 let entries: Vec<drive_proof_verifier::SplitCountEntry> = triples
603 .into_iter()
604 .map(
605 |(in_key, key, count)| drive_proof_verifier::SplitCountEntry { in_key, key, count },
606 )
607 .collect();
608 drive_proof_verifier::DocumentSplitCounts::from_verified(entries)
609 }
610}
611
612impl MockResponse for drive_proof_verifier::DocumentSum {
613 fn mock_serialize(&self, _sdk: &MockDashPlatformSdk) -> Vec<u8> {
614 let bincode_config = standard();
615 bincode::encode_to_vec(self.0, bincode_config).expect("encode DocumentSum")
616 }
617
618 fn mock_deserialize(_sdk: &MockDashPlatformSdk, buf: &[u8]) -> Self
619 where
620 Self: Sized,
621 {
622 let bincode_config = standard();
623 let (sum, _): (i64, _) =
624 bincode::decode_from_slice(buf, bincode_config).expect("decode DocumentSum");
625 drive_proof_verifier::DocumentSum(sum)
626 }
627}
628
629type DocumentSplitSumTriples = Vec<(Option<Vec<u8>>, Vec<u8>, Option<i64>)>;
634
635impl MockResponse for drive_proof_verifier::DocumentSplitSums {
636 fn mock_serialize(&self, _sdk: &MockDashPlatformSdk) -> Vec<u8> {
637 let bincode_config = standard();
638 let triples: DocumentSplitSumTriples = self
639 .0
640 .iter()
641 .map(|e| (e.in_key.clone(), e.key.clone(), e.sum))
642 .collect();
643 bincode::encode_to_vec(triples, bincode_config).expect("encode DocumentSplitSums")
644 }
645
646 fn mock_deserialize(_sdk: &MockDashPlatformSdk, buf: &[u8]) -> Self
647 where
648 Self: Sized,
649 {
650 let bincode_config = standard();
651 let (triples, _): (DocumentSplitSumTriples, _) =
652 bincode::decode_from_slice(buf, bincode_config).expect("decode DocumentSplitSums");
653 let entries: Vec<drive_proof_verifier::SplitSumEntry> = triples
654 .into_iter()
655 .map(|(in_key, key, sum)| drive_proof_verifier::SplitSumEntry { in_key, key, sum })
656 .collect();
657 drive_proof_verifier::DocumentSplitSums(entries)
658 }
659}
660
661impl MockResponse for drive_proof_verifier::DocumentAverage {
662 fn mock_serialize(&self, _sdk: &MockDashPlatformSdk) -> Vec<u8> {
663 let bincode_config = standard();
664 bincode::encode_to_vec((self.count, self.sum), bincode_config)
665 .expect("encode DocumentAverage")
666 }
667
668 fn mock_deserialize(_sdk: &MockDashPlatformSdk, buf: &[u8]) -> Self
669 where
670 Self: Sized,
671 {
672 let bincode_config = standard();
673 let ((count, sum), _): ((u64, i64), _) =
674 bincode::decode_from_slice(buf, bincode_config).expect("decode DocumentAverage");
675 drive_proof_verifier::DocumentAverage { count, sum }
676 }
677}
678
679type DocumentSplitAverageTuples = Vec<(Option<Vec<u8>>, Vec<u8>, Option<u64>, Option<i64>)>;
684
685impl MockResponse for drive_proof_verifier::DocumentSplitAverages {
686 fn mock_serialize(&self, _sdk: &MockDashPlatformSdk) -> Vec<u8> {
687 let bincode_config = standard();
688 let tuples: DocumentSplitAverageTuples = self
689 .0
690 .iter()
691 .map(|e| (e.in_key.clone(), e.key.clone(), e.count, e.sum))
692 .collect();
693 bincode::encode_to_vec(tuples, bincode_config).expect("encode DocumentSplitAverages")
694 }
695
696 fn mock_deserialize(_sdk: &MockDashPlatformSdk, buf: &[u8]) -> Self
697 where
698 Self: Sized,
699 {
700 let bincode_config = standard();
701 let (tuples, _): (DocumentSplitAverageTuples, _) =
702 bincode::decode_from_slice(buf, bincode_config).expect("decode DocumentSplitAverages");
703 let entries: Vec<drive_proof_verifier::SplitAverageEntry> = tuples
704 .into_iter()
705 .map(
706 |(in_key, key, count, sum)| drive_proof_verifier::SplitAverageEntry {
707 in_key,
708 key,
709 count,
710 sum,
711 },
712 )
713 .collect();
714 drive_proof_verifier::DocumentSplitAverages(entries)
715 }
716}