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 crate::platform::query::WireQuery for IdentitiesContractKeysQuery {}
92
93impl TransportRequest for IdentitiesContractKeysQuery {
94 type Client = <GetIdentitiesContractKeysRequest as TransportRequest>::Client;
95 type Response = <GetIdentitiesContractKeysRequest as TransportRequest>::Response;
96 const SETTINGS_OVERRIDES: rs_dapi_client::RequestSettings =
97 <GetIdentitiesContractKeysRequest as TransportRequest>::SETTINGS_OVERRIDES;
98
99 fn request_name(&self) -> &'static str {
100 "getIdentitiesContractKeysRequest"
101 }
102
103 fn method_name(&self) -> &'static str {
104 "get_identities_contract_keys"
105 }
106
107 fn execute_transport<'c>(
108 self,
109 client: &'c mut Self::Client,
110 settings: &AppliedRequestSettings,
111 ) -> BoxFuture<'c, Result<Self::Response, TransportError>> {
112 let request: GetIdentitiesContractKeysRequest = self
113 .try_into()
114 .expect("IdentitiesContractKeysQuery should always be valid");
115 request.execute_transport(client, settings)
116 }
117}