Skip to main content

hermes_test_components/setup/impls/
connection.rs

1use cgp::core::error::{CanRaiseError, ErrorOf};
2use hermes_relayer_components::birelay::traits::two_way::HasTwoWayRelay;
3use hermes_relayer_components::chain::traits::types::connection::HasInitConnectionOptionsType;
4use hermes_relayer_components::chain::traits::types::ibc::HasIbcChainTypes;
5use hermes_relayer_components::chain::types::aliases::ConnectionIdOf;
6use hermes_relayer_components::multi::traits::birelay_at::{BiRelayAt, HasBiRelayTypeAt};
7use hermes_relayer_components::multi::traits::chain_at::ChainAt;
8use hermes_relayer_components::multi::traits::relay_at::{HasRelayTypeAt, RelayAt};
9use hermes_relayer_components::relay::impls::connection::bootstrap::CanBootstrapConnection;
10
11use crate::setup::traits::connection::ConnectionSetup;
12use crate::setup::traits::init_connection_options_at::HasInitConnectionOptionsAt;
13
14pub struct SetupConnectionHandshake;
15
16impl<Setup, const A: usize, const B: usize> ConnectionSetup<Setup, A, B>
17    for SetupConnectionHandshake
18where
19    Setup: HasBiRelayTypeAt<A, B>
20        + HasInitConnectionOptionsAt<A, B>
21        + CanRaiseError<ErrorOf<RelayAt<Setup, A, B>>>,
22    ChainAt<Setup, A>:
23        HasIbcChainTypes<ChainAt<Setup, B>> + HasInitConnectionOptionsType<ChainAt<Setup, B>>,
24    ChainAt<Setup, B>: HasIbcChainTypes<ChainAt<Setup, A>>,
25    RelayAt<Setup, A, B>: CanBootstrapConnection,
26    BiRelayAt<Setup, A, B>: HasTwoWayRelay + HasRelayTypeAt<0, 1, Relay = RelayAt<Setup, A, B>>,
27{
28    async fn setup_connection(
29        setup: &Setup,
30        birelay: &BiRelayAt<Setup, A, B>,
31    ) -> Result<
32        (
33            ConnectionIdOf<ChainAt<Setup, A>, ChainAt<Setup, B>>,
34            ConnectionIdOf<ChainAt<Setup, B>, ChainAt<Setup, A>>,
35        ),
36        Setup::Error,
37    > {
38        let (connection_id_a, connection_id_b) = birelay
39            .relay_a_to_b()
40            .bootstrap_connection(&setup.init_connection_options())
41            .await
42            .map_err(Setup::raise_error)?;
43
44        Ok((connection_id_a, connection_id_b))
45    }
46}