#[cfg(feature = "diesel")]
pub(in crate) mod diesel;
mod error;
#[cfg(feature = "diesel")]
pub use self::diesel::{DieselCommitStore, DieselConnectionCommitStore};
pub use error::CommitStoreError;
#[derive(Clone, Debug, Serialize, PartialEq)]
pub struct Commit {
pub commit_id: String,
pub commit_num: i64,
pub service_id: Option<String>,
}
#[derive(Clone, Debug, Serialize, PartialEq)]
pub struct ChainRecord {
pub start_commit_num: i64,
pub end_commit_num: i64,
pub service_id: Option<String>,
}
#[derive(Clone, Eq, PartialEq)]
pub enum StateChange {
Set { key: String, value: Vec<u8> },
Delete { key: String },
}
#[derive(Clone)]
pub struct CommitEvent {
pub service_id: Option<String>,
pub id: String,
pub height: Option<u64>,
pub state_changes: Vec<StateChange>,
}
pub trait CommitStore {
fn add_commit(&self, commit: Commit) -> Result<(), CommitStoreError>;
fn get_commit_by_commit_num(&self, commit_num: i64)
-> Result<Option<Commit>, CommitStoreError>;
fn get_current_commit_id(&self) -> Result<Option<String>, CommitStoreError>;
fn get_current_service_commits(&self) -> Result<Vec<Commit>, CommitStoreError>;
fn get_next_commit_num(&self) -> Result<i64, CommitStoreError>;
fn resolve_fork(&self, commit_num: i64) -> Result<(), CommitStoreError>;
fn create_db_commit_from_commit_event(
&self,
event: &CommitEvent,
) -> Result<Option<Commit>, CommitStoreError>;
}
impl<CS> CommitStore for Box<CS>
where
CS: CommitStore + ?Sized,
{
fn add_commit(&self, commit: Commit) -> Result<(), CommitStoreError> {
(**self).add_commit(commit)
}
fn get_commit_by_commit_num(
&self,
commit_num: i64,
) -> Result<Option<Commit>, CommitStoreError> {
(**self).get_commit_by_commit_num(commit_num)
}
fn get_current_commit_id(&self) -> Result<Option<String>, CommitStoreError> {
(**self).get_current_commit_id()
}
fn get_current_service_commits(&self) -> Result<Vec<Commit>, CommitStoreError> {
(**self).get_current_service_commits()
}
fn get_next_commit_num(&self) -> Result<i64, CommitStoreError> {
(**self).get_next_commit_num()
}
fn resolve_fork(&self, commit_num: i64) -> Result<(), CommitStoreError> {
(**self).resolve_fork(commit_num)
}
fn create_db_commit_from_commit_event(
&self,
event: &CommitEvent,
) -> Result<Option<Commit>, CommitStoreError> {
(**self).create_db_commit_from_commit_event(event)
}
}