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(self, prove: bool) -> Result<GetIdentitiesContractKeysRequest, Error> {
69 let IdentitiesContractKeysQuery {
70 identities_ids,
71 contract_id,
72 document_type_name,
73 purposes,
74 } = self;
75 Ok(GetIdentitiesContractKeysRequest {
76 version: Some(V0(GetIdentitiesContractKeysRequestV0 {
77 identities_ids: identities_ids.into_iter().map(|a| a.to_vec()).collect(),
78 contract_id: contract_id.to_vec(),
79 document_type_name,
80 purposes: purposes.into_iter().map(|purpose| purpose as i32).collect(),
81 prove,
82 })),
83 })
84 }
85}
86
87impl TransportRequest for IdentitiesContractKeysQuery {
88 type Client = <GetIdentitiesContractKeysRequest as TransportRequest>::Client;
89 type Response = <GetIdentitiesContractKeysRequest as TransportRequest>::Response;
90 const SETTINGS_OVERRIDES: rs_dapi_client::RequestSettings =
91 <GetIdentitiesContractKeysRequest as TransportRequest>::SETTINGS_OVERRIDES;
92
93 fn request_name(&self) -> &'static str {
94 "getIdentitiesContractKeysRequest"
95 }
96
97 fn method_name(&self) -> &'static str {
98 "get_identities_contract_keys"
99 }
100
101 fn execute_transport<'c>(
102 self,
103 client: &'c mut Self::Client,
104 settings: &AppliedRequestSettings,
105 ) -> BoxFuture<'c, Result<Self::Response, TransportError>> {
106 let request: GetIdentitiesContractKeysRequest = self
107 .try_into()
108 .expect("IdentitiesContractKeysQuery should always be valid");
109 request.execute_transport(client, settings)
110 }
111}