mod builder;
#[cfg(feature = "diesel")]
pub(in crate) mod diesel;
mod error;
use crate::paging::Paging;
#[cfg(feature = "diesel")]
pub use self::diesel::{DieselConnectionPikeStore, DieselPikeStore};
pub use builder::{
AgentBuilder, AlternateIdBuilder, OrganizationBuilder, OrganizationMetadataBuilder, RoleBuilder,
};
pub use error::PikeStoreError;
#[derive(Clone, Debug, Serialize, PartialEq)]
pub struct Agent {
public_key: String,
org_id: String,
active: bool,
metadata: Vec<u8>,
roles: Vec<String>,
start_commit_num: i64,
end_commit_num: i64,
service_id: Option<String>,
last_updated: Option<i64>,
}
impl Agent {
pub fn public_key(&self) -> &str {
&self.public_key
}
pub fn org_id(&self) -> &str {
&self.org_id
}
pub fn active(&self) -> bool {
self.active
}
pub fn metadata(&self) -> &[u8] {
&self.metadata
}
pub fn roles(&self) -> &[String] {
&self.roles
}
pub fn start_commit_num(&self) -> &i64 {
&self.start_commit_num
}
pub fn end_commit_num(&self) -> &i64 {
&self.end_commit_num
}
pub fn service_id(&self) -> Option<&str> {
self.service_id.as_deref()
}
pub fn last_updated(&self) -> Option<&i64> {
self.last_updated.as_ref()
}
}
#[derive(Clone, Debug, Serialize, PartialEq)]
pub struct Role {
name: String,
org_id: String,
description: String,
active: bool,
permissions: Vec<String>,
allowed_organizations: Vec<String>,
inherit_from: Vec<String>,
start_commit_num: i64,
end_commit_num: i64,
service_id: Option<String>,
last_updated: Option<i64>,
}
impl Role {
pub fn name(&self) -> &str {
&self.name
}
pub fn org_id(&self) -> &str {
&self.org_id
}
pub fn description(&self) -> &str {
&self.description
}
pub fn active(&self) -> bool {
self.active
}
pub fn permissions(&self) -> &[String] {
&self.permissions
}
pub fn allowed_organizations(&self) -> &[String] {
&self.allowed_organizations
}
pub fn inherit_from(&self) -> &[String] {
&self.inherit_from
}
pub fn start_commit_num(&self) -> &i64 {
&self.start_commit_num
}
pub fn end_commit_num(&self) -> &i64 {
&self.end_commit_num
}
pub fn service_id(&self) -> Option<&str> {
self.service_id.as_deref()
}
pub fn last_updated(&self) -> Option<&i64> {
self.last_updated.as_ref()
}
}
#[derive(Clone, Debug, Serialize, PartialEq)]
pub struct RoleList {
pub data: Vec<Role>,
pub paging: Paging,
}
impl RoleList {
pub fn new(data: Vec<Role>, paging: Paging) -> Self {
Self { data, paging }
}
}
#[derive(Clone, Debug, Serialize, PartialEq)]
pub struct Organization {
org_id: String,
name: String,
locations: Vec<String>,
alternate_ids: Vec<AlternateId>,
metadata: Vec<OrganizationMetadata>,
start_commit_num: i64,
end_commit_num: i64,
service_id: Option<String>,
last_updated: Option<i64>,
}
impl Organization {
pub fn org_id(&self) -> &str {
&self.org_id
}
pub fn name(&self) -> &str {
&self.name
}
pub fn locations(&self) -> &[String] {
&self.locations
}
pub fn alternate_ids(&self) -> &[AlternateId] {
&self.alternate_ids
}
pub fn metadata(&self) -> &[OrganizationMetadata] {
&self.metadata
}
pub fn start_commit_num(&self) -> &i64 {
&self.start_commit_num
}
pub fn end_commit_num(&self) -> &i64 {
&self.end_commit_num
}
pub fn service_id(&self) -> Option<&str> {
self.service_id.as_deref()
}
pub fn last_updated(&self) -> Option<&i64> {
self.last_updated.as_ref()
}
}
#[derive(Clone, Debug, Serialize, PartialEq)]
pub struct AlternateId {
org_id: String,
alternate_id_type: String,
alternate_id: String,
start_commit_num: i64,
end_commit_num: i64,
service_id: Option<String>,
}
impl AlternateId {
pub fn org_id(&self) -> &str {
&self.org_id
}
pub fn alternate_id_type(&self) -> &str {
&self.alternate_id_type
}
pub fn alternate_id(&self) -> &str {
&self.alternate_id
}
pub fn start_commit_num(&self) -> &i64 {
&self.start_commit_num
}
pub fn end_commit_num(&self) -> &i64 {
&self.end_commit_num
}
pub fn service_id(&self) -> Option<&str> {
self.service_id.as_deref()
}
}
pub struct OrganizationList {
pub data: Vec<Organization>,
pub paging: Paging,
}
impl OrganizationList {
pub fn new(data: Vec<Organization>, paging: Paging) -> Self {
Self { data, paging }
}
}
#[derive(Clone, Debug, Serialize, PartialEq)]
pub struct AgentList {
pub data: Vec<Agent>,
pub paging: Paging,
}
impl AgentList {
pub fn new(data: Vec<Agent>, paging: Paging) -> Self {
Self { data, paging }
}
}
#[derive(Clone, Debug, Serialize, PartialEq)]
pub struct OrganizationMetadata {
key: String,
value: String,
start_commit_num: i64,
end_commit_num: i64,
service_id: Option<String>,
}
impl OrganizationMetadata {
pub fn key(&self) -> &str {
&self.key
}
pub fn value(&self) -> &str {
&self.value
}
pub fn start_commit_num(&self) -> &i64 {
&self.start_commit_num
}
pub fn end_commit_num(&self) -> &i64 {
&self.end_commit_num
}
pub fn service_id(&self) -> Option<&str> {
self.service_id.as_deref()
}
}
pub trait PikeStore {
fn add_agent(&self, agent: Agent) -> Result<(), PikeStoreError>;
fn add_role(&self, role: Role) -> Result<(), PikeStoreError>;
fn list_agents(
&self,
service_id: Option<&str>,
offset: i64,
limit: i64,
) -> Result<AgentList, PikeStoreError>;
fn list_roles_for_organization(
&self,
org_id: &str,
service_id: Option<&str>,
offset: i64,
limit: i64,
) -> Result<RoleList, PikeStoreError>;
fn get_agent(
&self,
pub_key: &str,
service_id: Option<&str>,
) -> Result<Option<Agent>, PikeStoreError>;
fn get_role(
&self,
name: &str,
org_id: &str,
service_id: Option<&str>,
) -> Result<Option<Role>, PikeStoreError>;
fn update_agent(&self, agent: Agent) -> Result<(), PikeStoreError>;
fn delete_role(&self, address: &str, current_commit_num: i64) -> Result<(), PikeStoreError>;
fn add_organization(&self, org: Organization) -> Result<(), PikeStoreError>;
fn list_organizations(
&self,
service_id: Option<&str>,
offset: i64,
limit: i64,
) -> Result<OrganizationList, PikeStoreError>;
fn get_organization(
&self,
org_id: &str,
service_id: Option<&str>,
) -> Result<Option<Organization>, PikeStoreError>;
}
impl<PS> PikeStore for Box<PS>
where
PS: PikeStore + ?Sized,
{
fn add_agent(&self, agent: Agent) -> Result<(), PikeStoreError> {
(**self).add_agent(agent)
}
fn add_role(&self, role: Role) -> Result<(), PikeStoreError> {
(**self).add_role(role)
}
fn list_agents(
&self,
service_id: Option<&str>,
offset: i64,
limit: i64,
) -> Result<AgentList, PikeStoreError> {
(**self).list_agents(service_id, offset, limit)
}
fn list_roles_for_organization(
&self,
org_id: &str,
service_id: Option<&str>,
offset: i64,
limit: i64,
) -> Result<RoleList, PikeStoreError> {
(**self).list_roles_for_organization(org_id, service_id, offset, limit)
}
fn get_agent(
&self,
pub_key: &str,
service_id: Option<&str>,
) -> Result<Option<Agent>, PikeStoreError> {
(**self).get_agent(pub_key, service_id)
}
fn get_role(
&self,
name: &str,
org_id: &str,
service_id: Option<&str>,
) -> Result<Option<Role>, PikeStoreError> {
(**self).get_role(name, org_id, service_id)
}
fn update_agent(&self, agent: Agent) -> Result<(), PikeStoreError> {
(**self).update_agent(agent)
}
fn delete_role(&self, address: &str, current_commit_num: i64) -> Result<(), PikeStoreError> {
(**self).delete_role(address, current_commit_num)
}
fn add_organization(&self, org: Organization) -> Result<(), PikeStoreError> {
(**self).add_organization(org)
}
fn list_organizations(
&self,
service_id: Option<&str>,
offset: i64,
limit: i64,
) -> Result<OrganizationList, PikeStoreError> {
(**self).list_organizations(service_id, offset, limit)
}
fn get_organization(
&self,
org_id: &str,
service_id: Option<&str>,
) -> Result<Option<Organization>, PikeStoreError> {
(**self).get_organization(org_id, service_id)
}
}