#[cfg(feature = "diesel")]
pub mod diesel;
mod error;
pub mod memory;
pub use error::OrganizationStoreError;
use crate::hex::as_hex;
#[derive(Clone, Debug, Serialize, PartialEq)]
pub struct Organization {
pub org_id: String,
pub name: String,
pub address: String,
#[serde(serialize_with = "as_hex")]
#[serde(deserialize_with = "deserialize_hex")]
#[serde(default)]
pub metadata: Vec<u8>,
pub start_commit_num: i64,
pub end_commit_num: i64,
pub service_id: Option<String>,
}
pub trait OrganizationStore: Send + Sync {
fn add_organizations(&self, orgs: Vec<Organization>) -> Result<(), OrganizationStoreError>;
fn list_organizations(
&self,
service_id: Option<&str>,
) -> Result<Vec<Organization>, OrganizationStoreError>;
fn fetch_organization(
&self,
org_id: &str,
service_id: Option<&str>,
) -> Result<Option<Organization>, OrganizationStoreError>;
}
impl<OS> OrganizationStore for Box<OS>
where
OS: OrganizationStore + ?Sized,
{
fn add_organizations(&self, orgs: Vec<Organization>) -> Result<(), OrganizationStoreError> {
(**self).add_organizations(orgs)
}
fn list_organizations(
&self,
service_id: Option<&str>,
) -> Result<Vec<Organization>, OrganizationStoreError> {
(**self).list_organizations(service_id)
}
fn fetch_organization(
&self,
org_id: &str,
service_id: Option<&str>,
) -> Result<Option<Organization>, OrganizationStoreError> {
(**self).fetch_organization(org_id, service_id)
}
}