use abstract_interface::{Abstract, AbstractInterfaceError};
use cw_orch::prelude::*;
use crate::{account::Account, AbstractClient};
pub trait Environment<Chain: CwEnv> {
fn environment(&self) -> Chain;
}
pub(crate) trait Infrastructure<Chain: CwEnv>: Environment<Chain> {
fn infrastructure(&self) -> Result<Abstract<Chain>, AbstractInterfaceError> {
let chain = self.environment();
Abstract::load_from(chain)
}
}
impl<Chain: CwEnv, T> Infrastructure<Chain> for T where T: Environment<Chain> {}
impl<Chain: CwEnv> Environment<Chain> for Account<Chain> {
fn environment(&self) -> Chain {
self.abstr_account.proxy.get_chain().clone()
}
}
impl<Chain: CwEnv> Environment<Chain> for AbstractClient<Chain> {
fn environment(&self) -> Chain {
self.abstr.version_control.get_chain().clone()
}
}