fedimint_meta_client/
api.rs1use fedimint_api_client::api::{FederationApiExt as _, FederationResult, IModuleFederationApi};
2use fedimint_core::module::{ApiAuth, ApiRequestErased};
3use fedimint_core::task::{MaybeSend, MaybeSync};
4use fedimint_core::{apply, async_trait_maybe_send};
5use fedimint_meta_common::endpoint::{
6 GetConsensusRequest, GetSubmissionResponse, GetSubmissionsRequest, SubmitRequest,
7 GET_CONSENSUS_ENDPOINT, GET_CONSENSUS_REV_ENDPOINT, GET_SUBMISSIONS_ENDPOINT, SUBMIT_ENDPOINT,
8};
9use fedimint_meta_common::{MetaConsensusValue, MetaKey, MetaValue};
10
11#[apply(async_trait_maybe_send!)]
12pub trait MetaFederationApi {
13 async fn get_consensus(&self, key: MetaKey) -> FederationResult<Option<MetaConsensusValue>>;
14 async fn get_consensus_rev(&self, key: MetaKey) -> FederationResult<Option<u64>>;
15 async fn get_submissions(
16 &self,
17 key: MetaKey,
18 auth: ApiAuth,
19 ) -> FederationResult<GetSubmissionResponse>;
20 async fn submit(
21 &self,
22 key: MetaKey,
23 value: MetaValue,
24 auth: ApiAuth,
25 ) -> FederationResult<Option<u64>>;
26}
27
28#[apply(async_trait_maybe_send!)]
29impl<T: ?Sized> MetaFederationApi for T
30where
31 T: IModuleFederationApi + MaybeSend + MaybeSync + 'static,
32{
33 async fn get_consensus(&self, key: MetaKey) -> FederationResult<Option<MetaConsensusValue>> {
34 self.request_current_consensus(
35 GET_CONSENSUS_ENDPOINT.to_string(),
36 ApiRequestErased::new(GetConsensusRequest(key)),
37 )
38 .await
39 }
40 async fn get_consensus_rev(&self, key: MetaKey) -> FederationResult<Option<u64>> {
41 self.request_current_consensus(
42 GET_CONSENSUS_REV_ENDPOINT.to_string(),
43 ApiRequestErased::new(GetConsensusRequest(key)),
44 )
45 .await
46 }
47
48 async fn get_submissions(
49 &self,
50 key: MetaKey,
51 auth: ApiAuth,
52 ) -> FederationResult<GetSubmissionResponse> {
53 self.request_admin(
54 GET_SUBMISSIONS_ENDPOINT,
55 ApiRequestErased::new(GetSubmissionsRequest(key)),
56 auth,
57 )
58 .await
59 }
60 async fn submit(
61 &self,
62 key: MetaKey,
63 value: MetaValue,
64 auth: ApiAuth,
65 ) -> FederationResult<Option<u64>> {
66 self.request_admin(
67 SUBMIT_ENDPOINT,
68 ApiRequestErased::new(SubmitRequest { key, value }),
69 auth,
70 )
71 .await
72 }
73}