dash_platform_queries/documents/
document_count.rs1use crate::documents::count_proof_helpers::{
22 assert_select_is_count, check_count_request, verify_count_query,
23};
24use crate::documents::document_query::DocumentQuery;
25use dapi_grpc::platform::v0::{GetDocumentsResponse, Proof, ResponseMetadata};
26use dash_context_provider::ContextProvider;
27use dpp::dashcore::Network;
28use dpp::version::PlatformVersion;
29use drive_proof_verifier::{DocumentCount, FromProof};
30
31impl FromProof<DocumentQuery> for DocumentCount {
32 type Request = DocumentQuery;
33 type Response = GetDocumentsResponse;
34
35 fn check_request(
39 request: &Self::Request,
40 platform_version: &PlatformVersion,
41 ) -> Result<(), drive_proof_verifier::Error> {
42 check_count_request(request, true, platform_version)
43 }
44
45 fn maybe_from_proof_with_metadata<'a, I: Into<Self::Request>, O: Into<Self::Response>>(
46 request: I,
47 response: O,
48 _network: Network,
49 platform_version: &PlatformVersion,
50 provider: &'a dyn ContextProvider,
51 ) -> Result<(Option<Self>, ResponseMetadata, Proof), drive_proof_verifier::Error>
52 where
53 Self: 'a,
54 {
55 let request: Self::Request = request.into();
56 assert_select_is_count(&request)?;
57 let response: Self::Response = response.into();
58 let (entries, mtd, proof) =
59 verify_count_query(request, response, true, platform_version, provider)?;
60 let count = entries
61 .map(|es| es.iter().filter_map(|e| e.count).sum::<u64>())
62 .map(DocumentCount);
63 Ok((count, mtd, proof))
64 }
65}