use crate::boltz::ChainSwapData;
use crate::boltz::ReverseSwapData;
use crate::boltz::SubmarineSwapData;
use crate::boltz::SwapStatus;
use crate::Error;
use async_trait::async_trait;
mod memory;
#[cfg(feature = "sqlite")]
mod sqlite;
pub use memory::InMemorySwapStorage;
#[cfg(feature = "sqlite")]
pub use sqlite::SqliteSwapStorage;
#[async_trait]
pub trait SwapStorage: Send + Sync {
async fn insert_submarine(&self, id: String, data: SubmarineSwapData) -> Result<(), Error>;
async fn insert_reverse(&self, id: String, data: ReverseSwapData) -> Result<(), Error>;
async fn get_submarine(&self, id: &str) -> Result<Option<SubmarineSwapData>, Error>;
async fn get_reverse(&self, id: &str) -> Result<Option<ReverseSwapData>, Error>;
async fn update_status_submarine(&self, id: &str, status: SwapStatus) -> Result<(), Error>;
async fn update_status_reverse(&self, id: &str, status: SwapStatus) -> Result<(), Error>;
async fn update_submarine(&self, id: &str, data: SubmarineSwapData) -> Result<(), Error>;
async fn update_reverse(&self, id: &str, data: ReverseSwapData) -> Result<(), Error>;
async fn list_all_submarine(&self) -> Result<Vec<SubmarineSwapData>, Error>;
async fn list_all_reverse(&self) -> Result<Vec<ReverseSwapData>, Error>;
async fn remove_submarine(&self, id: &str) -> Result<Option<SubmarineSwapData>, Error>;
async fn remove_reverse(&self, id: &str) -> Result<Option<ReverseSwapData>, Error>;
async fn insert_chain(&self, id: String, data: ChainSwapData) -> Result<(), Error>;
async fn get_chain(&self, id: &str) -> Result<Option<ChainSwapData>, Error>;
async fn update_status_chain(&self, id: &str, status: SwapStatus) -> Result<(), Error>;
async fn update_chain(&self, id: &str, data: ChainSwapData) -> Result<(), Error>;
async fn list_all_chain(&self) -> Result<Vec<ChainSwapData>, Error>;
async fn remove_chain(&self, id: &str) -> Result<Option<ChainSwapData>, Error>;
}