iota_json_rpc/
bridge_api.rs1use std::sync::Arc;
6
7use async_trait::async_trait;
8use iota_core::authority::AuthorityState;
9use iota_json_rpc_api::{BridgeReadApiOpenRpc, BridgeReadApiServer, JsonRpcMetrics};
10use iota_open_rpc::Module;
11use iota_types::bridge::{BridgeSummary, BridgeTrait, get_bridge_obj_initial_shared_version};
12use jsonrpsee::{RpcModule, core::RpcResult};
13use tracing::instrument;
14
15use crate::{IotaRpcModule, authority_state::StateRead, error::Error, logger::FutureWithTracing};
16
17#[derive(Clone)]
18pub struct BridgeReadApi {
19 state: Arc<dyn StateRead>,
20 pub metrics: Arc<JsonRpcMetrics>,
21}
22
23impl BridgeReadApi {
24 pub fn new(state: Arc<AuthorityState>, metrics: Arc<JsonRpcMetrics>) -> Self {
25 Self { state, metrics }
26 }
27}
28
29#[async_trait]
30impl BridgeReadApiServer for BridgeReadApi {
31 #[instrument(skip(self))]
32 async fn get_latest_bridge(&self) -> RpcResult<BridgeSummary> {
33 async move {
34 self.state
35 .get_bridge()
36 .map_err(Error::from)?
37 .try_into_bridge_summary()
38 .map_err(Error::from)
39 }
40 .trace()
41 .await
42 }
43
44 #[instrument(skip(self))]
45 async fn get_bridge_object_initial_shared_version(&self) -> RpcResult<u64> {
46 async move {
47 Ok(
48 get_bridge_obj_initial_shared_version(self.state.get_object_store())?
49 .ok_or(Error::Unexpected(
50 "Failed to find Bridge object initial version".to_string(),
51 ))?
52 .into(),
53 )
54 }
55 .trace()
56 .await
57 }
58}
59
60impl IotaRpcModule for BridgeReadApi {
61 fn rpc(self) -> RpcModule<Self> {
62 self.into_rpc()
63 }
64
65 fn rpc_doc_module() -> Module {
66 BridgeReadApiOpenRpc::module_doc()
67 }
68}