dash_platform_queries/documents/
document_split_averages.rs1use crate::documents::average_proof_helpers::{
16 assert_select_is_avg, check_average_request, verify_average_query,
17};
18use crate::documents::document_query::DocumentQuery;
19use dapi_grpc::platform::v0::{GetDocumentsResponse, Proof, ResponseMetadata};
20use dash_context_provider::ContextProvider;
21use dpp::dashcore::Network;
22use dpp::version::PlatformVersion;
23use drive_proof_verifier::{DocumentSplitAverages, FromProof, SplitAverageEntry};
24
25impl FromProof<DocumentQuery> for DocumentSplitAverages {
26 type Request = DocumentQuery;
27 type Response = GetDocumentsResponse;
28
29 fn check_request(
30 request: &Self::Request,
31 platform_version: &PlatformVersion,
32 ) -> Result<(), drive_proof_verifier::Error> {
33 check_average_request(request, false, platform_version)
34 }
35
36 fn maybe_from_proof_with_metadata<'a, I: Into<Self::Request>, O: Into<Self::Response>>(
37 request: I,
38 response: O,
39 _network: Network,
40 platform_version: &PlatformVersion,
41 provider: &'a dyn ContextProvider,
42 ) -> Result<(Option<Self>, ResponseMetadata, Proof), drive_proof_verifier::Error>
43 where
44 Self: 'a,
45 {
46 let request: Self::Request = request.into();
47 assert_select_is_avg(&request)?;
48 let response: Self::Response = response.into();
49 let (entries, mtd, proof) =
50 verify_average_query(request, response, false, platform_version, provider)?;
51 let split = entries.map(|es| {
52 DocumentSplitAverages(
53 es.into_iter()
54 .map(|e| SplitAverageEntry {
55 in_key: e.in_key,
56 key: e.key,
57 count: e.count,
58 sum: e.sum,
59 })
60 .collect(),
61 )
62 });
63 Ok((split, mtd, proof))
64 }
65}