hermes-test-components 0.1.0

Implementation of an IBC Relayer in Rust, as a library
Documentation
use cgp::core::error::HasErrorType;
use hermes_relayer_components::chain::traits::types::ibc::HasIbcChainTypes;
use hermes_relayer_components::multi::traits::chain_at::ChainAt;
use hermes_relayer_components::multi::types::index::{Index, Twindex};

use crate::chain_driver::traits::types::chain::HasChain;
use crate::driver::traits::types::chain_driver_at::ChainDriverTypeAt;
use crate::setup::traits::birelay::CanSetupBiRelay;
use crate::setup::traits::chain::CanSetupChain;
use crate::setup::traits::channel::CanSetupChannel;
use crate::setup::traits::clients::CanSetupClients;
use crate::setup::traits::connection::CanSetupConnection;
use crate::setup::traits::driver::{DriverBuilder, HasTestDriverType};
use crate::setup::traits::drivers::binary_channel::CanBuildTestDriverWithBinaryChannel;

pub struct SetupBinaryChannelDriver;

impl<Setup> DriverBuilder<Setup> for SetupBinaryChannelDriver
where
    Setup: HasTestDriverType
        + HasErrorType
        + CanSetupChain<0>
        + CanSetupChain<1>
        + CanSetupClients<0, 1>
        + CanSetupBiRelay<0, 1>
        + CanSetupConnection<0, 1>
        + CanSetupChannel<0, 1>
        + CanBuildTestDriverWithBinaryChannel,
    ChainDriverTypeAt<Setup, 0>: HasChain,
    ChainDriverTypeAt<Setup, 1>: HasChain,
    ChainAt<Setup, 0>: HasIbcChainTypes<ChainAt<Setup, 1>>,
    ChainAt<Setup, 1>: HasIbcChainTypes<ChainAt<Setup, 0>>,
{
    async fn build_driver(setup: &Setup) -> Result<Setup::TestDriver, Setup::Error> {
        let chain_driver_a = setup.setup_chain(Index::<0>).await?;

        let chain_driver_b = setup.setup_chain(Index::<1>).await?;

        let chain_a = chain_driver_a.chain();

        let chain_b = chain_driver_b.chain();

        let (client_id_a, client_id_b) = setup.setup_clients(chain_a, chain_b).await?;

        let birelay = setup
            .setup_birelay(
                Twindex::<0, 1>,
                chain_a,
                chain_b,
                &client_id_a,
                &client_id_b,
            )
            .await?;

        let (connection_id_a, connection_id_b) = setup.setup_connection(&birelay).await?;

        let (channel_id_a, channel_id_b, port_id_a, port_id_b) = setup
            .setup_channel(&birelay, &connection_id_a, &connection_id_b)
            .await?;

        let driver = setup
            .build_driver_with_binary_channel(
                birelay,
                chain_driver_a,
                chain_driver_b,
                connection_id_a,
                connection_id_b,
                channel_id_a,
                channel_id_b,
                port_id_a,
                port_id_b,
            )
            .await?;

        Ok(driver)
    }
}