#![cfg_attr(
all(doc, not(all(feature = "keyvalue", feature = "pubsub"))),
warn(broken_intra_doc_links)
)]
use actionable::{Action, ResourceName};
use serde::{Deserialize, Serialize};
use crate::schema::{CollectionName, ViewName};
#[must_use]
pub fn pliantdb_resource_name<'a>() -> ResourceName<'a> {
ResourceName::named("pliantdb")
}
#[must_use]
pub fn database_resource_name(name: &'_ str) -> ResourceName<'_> {
pliantdb_resource_name().and(name)
}
#[must_use]
pub fn collection_resource_name<'a>(
database: &'a str,
collection: &'a CollectionName,
) -> ResourceName<'a> {
database_resource_name(database).and(collection.to_string())
}
#[must_use]
pub fn document_resource_name<'a>(
database: &'a str,
collection: &'a CollectionName,
id: u64,
) -> ResourceName<'a> {
collection_resource_name(database, collection)
.and("document")
.and(id)
}
#[must_use]
pub fn view_resource_name<'a>(database: &'a str, view: &'a ViewName) -> ResourceName<'a> {
database_resource_name(database)
.and(view.collection.to_string())
.and("view")
.and(view.name.as_ref())
}
#[must_use]
pub fn pubsub_topic_resource_name<'a>(database: &'a str, topic: &'a str) -> ResourceName<'a> {
database_resource_name(database).and("pubsub").and(topic)
}
#[must_use]
pub fn kv_key_resource_name<'a>(
database: &'a str,
namespace: Option<&'a str>,
key: &'a str,
) -> ResourceName<'a> {
database_resource_name(database)
.and("pubsub")
.and(namespace.unwrap_or(""))
.and(key)
}
#[derive(Action, Serialize, Deserialize, Clone, Copy, Debug)]
#[allow(clippy::module_name_repetitions)]
pub enum PliantAction {
Server(ServerAction),
Database(DatabaseAction),
}
#[derive(Action, Serialize, Deserialize, Clone, Copy, Debug)]
pub enum ServerAction {
Connect,
ListAvailableSchemas,
ListDatabases,
CreateDatabase,
DeleteDatabase,
}
#[derive(Action, Serialize, Deserialize, Clone, Copy, Debug)]
pub enum DatabaseAction {
Document(DocumentAction),
View(ViewAction),
Transaction(TransactionAction),
PubSub(PubSubAction),
Kv(KvAction),
}
#[derive(Action, Serialize, Deserialize, Clone, Copy, Debug)]
pub enum DocumentAction {
Get,
Insert,
Update,
Delete,
}
#[derive(Action, Serialize, Deserialize, Clone, Copy, Debug)]
pub enum ViewAction {
Query,
Reduce,
}
#[derive(Action, Serialize, Deserialize, Clone, Copy, Debug)]
pub enum TransactionAction {
ListExecuted,
GetLastId,
}
#[derive(Action, Serialize, Deserialize, Clone, Copy, Debug)]
pub enum PubSubAction {
CreateSuscriber,
Publish,
SubscribeTo,
UnsubscribeFrom,
}
#[derive(Action, Serialize, Deserialize, Clone, Copy, Debug)]
pub enum KvAction {
ExecuteOperation,
}