1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
use eyre::eyre;
use ibc_relayer::chain::handle::ChainHandle;
use ibc_relayer::util::task::TaskHandle;
use ibc_relayer::worker::client::spawn_refresh_client;

use crate::error::Error;
use crate::types::binary::foreign_client::ForeignClientPair;

pub fn spawn_refresh_client_tasks<ChainA: ChainHandle, ChainB: ChainHandle>(
    foreign_clients: &ForeignClientPair<ChainA, ChainB>,
) -> Result<[TaskHandle; 2], Error> {
    let refresh_task_a = spawn_refresh_client(foreign_clients.client_b_to_a.clone())
        .ok_or_else(|| eyre!("expect refresh task spawned"))?;

    let refresh_task_b = spawn_refresh_client(foreign_clients.client_a_to_b.clone())
        .ok_or_else(|| eyre!("expect refresh task spawned"))?;

    Ok([refresh_task_a, refresh_task_b])
}