use ambassador::delegatable_trait;
use std::path::Path;
#[delegatable_trait]
pub trait AtomicPublishAlg {
type Error;
type Publication;
fn begin_publication(&self, destination: &Path) -> Result<Self::Publication, Self::Error>;
fn write_publication(&self, publication: &mut Self::Publication, bytes: &[u8]) -> Result<(), Self::Error>;
fn commit_publication(&self, publication: Self::Publication) -> Result<(), Self::Error>;
fn abort_publication(&self, publication: Self::Publication);
}