sui_json_rpc/
bridge_api.rs

1// Copyright (c) Mysten Labs, Inc.
2// SPDX-License-Identifier: Apache-2.0
3
4use 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}