dash_platform_queries/documents/
document_count.rs1use crate::documents::count_proof_helpers::{assert_select_is_count, verify_count_query};
17use crate::documents::document_query::DocumentQuery;
18use dapi_grpc::platform::v0::{GetDocumentsResponse, Proof, ResponseMetadata};
19use dash_context_provider::ContextProvider;
20use dpp::dashcore::Network;
21use dpp::version::PlatformVersion;
22use drive_proof_verifier::{DocumentCount, FromProof};
23
24impl FromProof<DocumentQuery> for DocumentCount {
25 type Request = DocumentQuery;
26 type Response = GetDocumentsResponse;
27
28 fn maybe_from_proof_with_metadata<'a, I: Into<Self::Request>, O: Into<Self::Response>>(
29 request: I,
30 response: O,
31 _network: Network,
32 platform_version: &PlatformVersion,
33 provider: &'a dyn ContextProvider,
34 ) -> Result<(Option<Self>, ResponseMetadata, Proof), drive_proof_verifier::Error>
35 where
36 Self: 'a,
37 {
38 let request: Self::Request = request.into();
39 assert_select_is_count(&request)?;
40 let response: Self::Response = response.into();
41 let (entries, mtd, proof) =
42 verify_count_query(request, response, platform_version, provider)?;
43 let count = entries
44 .map(|es| es.iter().filter_map(|e| e.count).sum::<u64>())
45 .map(DocumentCount);
46 Ok((count, mtd, proof))
47 }
48}