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