1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
use abstract_sdk::{IbcCallbackEndpoint, IbcCallbackHandlerFn};
use serde::{de::DeserializeOwned, Serialize};

use crate::{ApiContract, ApiError};

impl<
        'a,
        T: Serialize + DeserializeOwned,
        C: Serialize + DeserializeOwned,
        E: From<cosmwasm_std::StdError> + From<ApiError>,
    > IbcCallbackEndpoint for ApiContract<'a, T, E, C>
{
    type ContractError = E;

    fn callback_handler(
        &self,
        id: &str,
    ) -> Option<IbcCallbackHandlerFn<Self, Self::ContractError>> {
        for ibc_callback_handler in self.ibc_callbacks {
            if ibc_callback_handler.0 == id {
                return Some(ibc_callback_handler.1);
            }
        }
        None
    }
}