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