hermes_cli/impls/
build.rs

1use hermes_cli_components::traits::build::{BuilderLoader, HasBuilderType};
2use hermes_cli_components::traits::config::load_config::CanLoadConfig;
3use hermes_cli_components::traits::types::config::HasConfigType;
4use hermes_cosmos_relayer::contexts::build::CosmosBuilder;
5use hermes_runtime::types::runtime::HermesRuntime;
6use hermes_runtime_components::traits::runtime::HasRuntime;
7use ibc_relayer::config::{ChainConfig, Config};
8
9pub struct LoadCosmosBuilder;
10
11impl<App> BuilderLoader<App> for LoadCosmosBuilder
12where
13    App: HasBuilderType<Builder = CosmosBuilder>
14        + HasConfigType<Config = Config>
15        + HasRuntime<Runtime = HermesRuntime>
16        + CanLoadConfig,
17{
18    async fn load_builder(app: &App) -> Result<App::Builder, App::Error> {
19        let runtime = app.runtime().clone();
20        let config = app.load_config().await?;
21
22        let chain_configs = config
23            .chains
24            .into_iter()
25            .map(|config| {
26                let ChainConfig::CosmosSdk(config) = config;
27                config
28            })
29            .collect();
30
31        let builder = CosmosBuilder::new(
32            chain_configs,
33            runtime,
34            Default::default(),
35            Default::default(),
36            Default::default(),
37            Default::default(),
38        );
39
40        Ok(builder)
41    }
42}