use crate::{CellId, CodecPolicyPatch, DirId, NamespaceName, Stamp};
#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum NodeKind {
Source,
Control,
Derived,
Mounted,
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct SourceRecord {
origin: String,
observed_at: Stamp,
}
impl SourceRecord {
pub fn new(origin: impl Into<String>, observed_at: Stamp) -> Self {
Self {
origin: origin.into(),
observed_at,
}
}
pub fn origin(&self) -> &str {
&self.origin
}
pub fn observed_at(&self) -> Stamp {
self.observed_at
}
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct CellRecord {
id: CellId,
parent: DirId,
name: NamespaceName,
kind: NodeKind,
source: Option<SourceRecord>,
policy_patch: CodecPolicyPatch,
created_at: Stamp,
}
impl CellRecord {
pub(crate) fn new(
id: CellId,
parent: DirId,
name: NamespaceName,
kind: NodeKind,
source: Option<SourceRecord>,
policy_patch: CodecPolicyPatch,
created_at: Stamp,
) -> Self {
Self {
id,
parent,
name,
kind,
source,
policy_patch,
created_at,
}
}
pub fn id(&self) -> &CellId {
&self.id
}
pub fn parent(&self) -> &DirId {
&self.parent
}
pub fn name(&self) -> &NamespaceName {
&self.name
}
pub fn kind(&self) -> NodeKind {
self.kind
}
pub fn source(&self) -> Option<&SourceRecord> {
self.source.as_ref()
}
pub fn policy_patch(&self) -> &CodecPolicyPatch {
&self.policy_patch
}
pub fn created_at(&self) -> Stamp {
self.created_at
}
pub(crate) fn rename(&mut self, parent: DirId, name: NamespaceName) {
self.parent = parent;
self.name = name;
}
pub(crate) fn set_policy_patch(&mut self, policy_patch: CodecPolicyPatch) {
self.policy_patch = policy_patch;
}
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct DirRecord {
id: DirId,
parent: Option<DirId>,
name: Option<NamespaceName>,
policy_patch: CodecPolicyPatch,
created_at: Stamp,
}
impl DirRecord {
pub(crate) fn root(id: DirId, created_at: Stamp) -> Self {
Self {
id,
parent: None,
name: None,
policy_patch: CodecPolicyPatch::empty(),
created_at,
}
}
pub(crate) fn child(
id: DirId,
parent: DirId,
name: NamespaceName,
policy_patch: CodecPolicyPatch,
created_at: Stamp,
) -> Self {
Self {
id,
parent: Some(parent),
name: Some(name),
policy_patch,
created_at,
}
}
pub fn id(&self) -> &DirId {
&self.id
}
pub fn parent(&self) -> Option<&DirId> {
self.parent.as_ref()
}
pub fn name(&self) -> Option<&NamespaceName> {
self.name.as_ref()
}
pub fn policy_patch(&self) -> &CodecPolicyPatch {
&self.policy_patch
}
pub fn created_at(&self) -> Stamp {
self.created_at
}
pub(crate) fn rename(&mut self, parent: DirId, name: NamespaceName) {
self.parent = Some(parent);
self.name = Some(name);
}
pub(crate) fn set_policy_patch(&mut self, policy_patch: CodecPolicyPatch) {
self.policy_patch = policy_patch;
}
}