dash_sdk/platform/
identities_contract_keys_query.rs1use dapi_grpc::platform::v0::get_identities_contract_keys_request::GetIdentitiesContractKeysRequestV0;
2use dapi_grpc::platform::v0::get_identities_contract_keys_request::Version::V0;
3use dapi_grpc::platform::v0::GetIdentitiesContractKeysRequest;
4use dpp::identity::Purpose;
5use rs_dapi_client::transport::{
6 AppliedRequestSettings, BoxFuture, TransportError, TransportRequest,
7};
8
9use crate::platform::query::Query;
10use crate::platform::Identifier;
11use crate::Error;
12
13#[derive(Debug, Clone, dash_platform_macros::Mockable)]
15#[cfg_attr(feature = "mocks", derive(serde::Serialize, serde::Deserialize))]
16pub struct IdentitiesContractKeysQuery {
17 pub identities_ids: Vec<Identifier>,
19 pub contract_id: Identifier,
21 pub document_type_name: Option<String>,
23 pub purposes: Vec<Purpose>,
25}
26
27impl IdentitiesContractKeysQuery {
28 pub fn new(
31 identities_ids: Vec<Identifier>,
32 contract_id: Identifier,
33 document_type_name: Option<String>,
34 purposes: Vec<Purpose>,
35 ) -> Result<Self, Error> {
36 Ok(Self {
37 identities_ids,
38 contract_id,
39 document_type_name,
40 purposes,
41 })
42 }
43}
44
45impl TryFrom<IdentitiesContractKeysQuery> for GetIdentitiesContractKeysRequest {
46 type Error = Error;
47 fn try_from(dapi_request: IdentitiesContractKeysQuery) -> Result<Self, Self::Error> {
48 let IdentitiesContractKeysQuery {
49 identities_ids,
50 contract_id,
51 document_type_name,
52 purposes,
53 } = dapi_request;
54 Ok(GetIdentitiesContractKeysRequest {
56 version: Some(V0(GetIdentitiesContractKeysRequestV0 {
57 identities_ids: identities_ids.into_iter().map(|a| a.to_vec()).collect(),
58 contract_id: contract_id.to_vec(),
59 document_type_name,
60 purposes: purposes.into_iter().map(|purpose| purpose as i32).collect(),
61 prove: true,
62 })),
63 })
64 }
65}
66
67impl Query<GetIdentitiesContractKeysRequest> for IdentitiesContractKeysQuery {
68 fn query(
69 &self,
70 settings: &crate::platform::QuerySettings<'_>,
71 ) -> Result<GetIdentitiesContractKeysRequest, Error> {
72 let prove = settings.prove;
73 let IdentitiesContractKeysQuery {
74 identities_ids,
75 contract_id,
76 document_type_name,
77 purposes,
78 } = self;
79 Ok(GetIdentitiesContractKeysRequest {
80 version: Some(V0(GetIdentitiesContractKeysRequestV0 {
81 identities_ids: identities_ids.iter().map(|a| a.to_vec()).collect(),
82 contract_id: contract_id.to_vec(),
83 document_type_name: document_type_name.clone(),
84 purposes: purposes.iter().map(|purpose| *purpose as i32).collect(),
85 prove,
86 })),
87 })
88 }
89}
90
91impl TransportRequest for IdentitiesContractKeysQuery {
92 type Client = <GetIdentitiesContractKeysRequest as TransportRequest>::Client;
93 type Response = <GetIdentitiesContractKeysRequest as TransportRequest>::Response;
94 const SETTINGS_OVERRIDES: rs_dapi_client::RequestSettings =
95 <GetIdentitiesContractKeysRequest as TransportRequest>::SETTINGS_OVERRIDES;
96
97 fn request_name(&self) -> &'static str {
98 "getIdentitiesContractKeysRequest"
99 }
100
101 fn method_name(&self) -> &'static str {
102 "get_identities_contract_keys"
103 }
104
105 fn execute_transport<'c>(
106 self,
107 client: &'c mut Self::Client,
108 settings: &AppliedRequestSettings,
109 ) -> BoxFuture<'c, Result<Self::Response, TransportError>> {
110 let request: GetIdentitiesContractKeysRequest = self
111 .try_into()
112 .expect("IdentitiesContractKeysQuery should always be valid");
113 request.execute_transport(client, settings)
114 }
115}