use crate::{ReturnCode, RmError, XaTransactionId};
use async_trait::async_trait;
#[async_trait]
pub trait ResourceManager: std::fmt::Debug + Send {
async fn start(&mut self, id: XaTransactionId) -> Result<ReturnCode, RmError>;
async fn start_by_joining(&mut self, id: XaTransactionId) -> Result<ReturnCode, RmError>;
async fn start_by_resuming(&mut self, id: XaTransactionId) -> Result<ReturnCode, RmError>;
async fn end_success(&mut self, id: XaTransactionId) -> Result<ReturnCode, RmError>;
async fn end_failure(&mut self, id: XaTransactionId) -> Result<ReturnCode, RmError>;
async fn end_suspend(&mut self, id: XaTransactionId) -> Result<ReturnCode, RmError>;
async fn prepare(&mut self, id: XaTransactionId) -> Result<ReturnCode, RmError>;
async fn commit(&mut self, id: XaTransactionId) -> Result<ReturnCode, RmError>;
async fn commit_one_phase(&mut self, id: XaTransactionId) -> Result<ReturnCode, RmError>;
async fn rollback(&mut self, id: XaTransactionId) -> Result<ReturnCode, RmError>;
async fn forget(&mut self, id: XaTransactionId) -> Result<ReturnCode, RmError>;
async fn recover(&mut self) -> Result<Vec<XaTransactionId>, RmError>;
async fn begin_recover(&mut self) -> Result<Vec<XaTransactionId>, RmError>;
async fn end_recover(&mut self) -> Result<Vec<XaTransactionId>, RmError>;
}