use crate::document::DocumentViewId;
use crate::identity::PublicKey;
use crate::operation::plain::PlainFields;
use crate::operation::{OperationAction, OperationFields, OperationVersion};
use crate::schema::SchemaId;
pub trait WithPublicKey {
fn public_key(&self) -> &PublicKey;
}
pub trait Actionable {
fn version(&self) -> OperationVersion;
fn action(&self) -> OperationAction;
fn previous(&self) -> Option<&DocumentViewId>;
}
pub trait Schematic {
fn schema_id(&self) -> &SchemaId;
fn fields(&self) -> Option<PlainFields>;
}
pub trait AsOperation {
fn action(&self) -> OperationAction;
fn schema_id(&self) -> SchemaId;
fn version(&self) -> OperationVersion;
fn fields(&self) -> Option<OperationFields>;
fn previous(&self) -> Option<DocumentViewId>;
fn has_fields(&self) -> bool {
self.fields().is_some()
}
fn has_previous_operations(&self) -> bool {
self.previous().is_some()
}
fn is_create(&self) -> bool {
self.action() == OperationAction::Create
}
fn is_update(&self) -> bool {
self.action() == OperationAction::Update
}
fn is_delete(&self) -> bool {
self.action() == OperationAction::Delete
}
}