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