drive/drive/document/query/query_chained_documents/v0/
mod.rs1use crate::drive::Drive;
2use crate::error::Error;
3use crate::fees::op::LowLevelDriveOperation;
4use crate::query::{ChainedDocumentsResult, DriveDocumentQuery};
5use dpp::block::epoch::Epoch;
6use dpp::version::PlatformVersion;
7use grovedb::TransactionArg;
8
9#[derive(Debug, Default)]
12pub struct QueryChainedDocumentsOutcomeV0 {
13 pub result: ChainedDocumentsResult,
15 pub cost: u64,
17}
18
19impl Drive {
20 #[inline(always)]
21 pub(super) fn query_chained_documents_v0(
22 &self,
23 query: &DriveDocumentQuery,
24 epoch: Option<&Epoch>,
25 transaction: TransactionArg,
26 platform_version: &PlatformVersion,
27 ) -> Result<QueryChainedDocumentsOutcomeV0, Error> {
28 let mut drive_operations: Vec<LowLevelDriveOperation> = vec![];
29 let result = query.execute_chained_no_proof_internal(
30 self,
31 transaction,
32 &mut drive_operations,
33 platform_version,
34 )?;
35 let cost = if let Some(epoch) = epoch {
36 Drive::calculate_fee(
37 None,
38 Some(drive_operations),
39 epoch,
40 self.config.epochs_per_era,
41 platform_version,
42 None,
43 )?
44 .processing_fee
45 } else {
46 0
47 };
48 Ok(QueryChainedDocumentsOutcomeV0 { result, cost })
49 }
50
51 #[inline(always)]
52 pub(super) fn query_chained_documents_with_proof_v0(
53 &self,
54 query: &DriveDocumentQuery,
55 platform_version: &PlatformVersion,
56 ) -> Result<(Vec<u8>, Vec<dpp::document::Document>), Error> {
57 let mut drive_operations: Vec<LowLevelDriveOperation> = vec![];
58 query.execute_chained_with_proof_internal(self, &mut drive_operations, platform_version)
59 }
60}