affine_core 0.0.2

AFFiNE primitive core.
Documentation
macro_rules! actions {
  ($name:ident, $request:ident, [$( $variant:ident => $value:literal ),+ $(,)?]) => {
    #[derive(Clone, Copy, Debug, Eq, PartialEq)]
    pub enum $name { $( $variant ),+ }

    impl $name {
      pub fn parse(value: &str) -> Option<Self> {
        match value { $( $value => Some(Self::$variant), )+ _ => None }
      }

      pub const fn as_str(self) -> &'static str {
        match self { $( Self::$variant => $value, )+ }
      }
    }

    impl From<$name> for $request {
      fn from(value: $name) -> Self { Self::Known(value) }
    }
  };
}

use super::{RequestedDocAction, RequestedWorkspaceAction};

actions!(WorkspaceAction, RequestedWorkspaceAction, [
  Read => "Workspace.Read",
  OrganizeRead => "Workspace.Organize.Read",
  PropertiesRead => "Workspace.Properties.Read",
  Sync => "Workspace.Sync",
  CreateDoc => "Workspace.CreateDoc",
  UsersRead => "Workspace.Users.Read",
  SettingsRead => "Workspace.Settings.Read",
  BlobsUpload => "Workspace.Blobs.Upload",
  Copilot => "Workspace.Copilot",
  UsersManage => "Workspace.Users.Manage",
  AdministratorsManage => "Workspace.Administrators.Manage",
  SettingsUpdate => "Workspace.Settings.Update",
  PropertiesCreate => "Workspace.Properties.Create",
  PropertiesUpdate => "Workspace.Properties.Update",
  PropertiesDelete => "Workspace.Properties.Delete",
  BlobsManage => "Workspace.Blobs.Manage",
  Delete => "Workspace.Delete",
  TransferOwner => "Workspace.TransferOwner",
  PaymentManage => "Workspace.Payment.Manage",
  Preview => "Workspace.Preview",
]);

actions!(DocAction, RequestedDocAction, [
  Read => "Doc.Read",
  Copy => "Doc.Copy",
  PropertiesRead => "Doc.Properties.Read",
  CommentsRead => "Doc.Comments.Read",
  UsersRead => "Doc.Users.Read",
  Duplicate => "Doc.Duplicate",
  HistoryRead => "Doc.History.Read",
  CommentsCreate => "Doc.Comments.Create",
  PropertiesUpdate => "Doc.Properties.Update",
  Update => "Doc.Update",
  AnalyticsRead => "Doc.Analytics.Read",
  AnalyticsViewersRead => "Doc.Analytics.Viewers.Read",
  Publish => "Doc.Publish",
  Unpublish => "Doc.Unpublish",
  Trash => "Doc.Trash",
  Restore => "Doc.Restore",
  Delete => "Doc.Delete",
  UsersManage => "Doc.Users.Manage",
  CommentsModerate => "Doc.Comments.Moderate",
  TransferOwner => "Doc.TransferOwner",
  Preview => "Doc.Preview",
]);

const WORKSPACE_ACTIONS: &[WorkspaceAction] = &[
  WorkspaceAction::Read,
  WorkspaceAction::OrganizeRead,
  WorkspaceAction::PropertiesRead,
  WorkspaceAction::Sync,
  WorkspaceAction::CreateDoc,
  WorkspaceAction::UsersRead,
  WorkspaceAction::SettingsRead,
  WorkspaceAction::BlobsUpload,
  WorkspaceAction::Copilot,
  WorkspaceAction::UsersManage,
  WorkspaceAction::AdministratorsManage,
  WorkspaceAction::SettingsUpdate,
  WorkspaceAction::PropertiesCreate,
  WorkspaceAction::PropertiesUpdate,
  WorkspaceAction::PropertiesDelete,
  WorkspaceAction::BlobsManage,
  WorkspaceAction::Delete,
  WorkspaceAction::TransferOwner,
  WorkspaceAction::PaymentManage,
  WorkspaceAction::Preview,
];

const DOC_ACTIONS: &[DocAction] = &[
  DocAction::Read,
  DocAction::Copy,
  DocAction::PropertiesRead,
  DocAction::CommentsRead,
  DocAction::UsersRead,
  DocAction::Duplicate,
  DocAction::HistoryRead,
  DocAction::CommentsCreate,
  DocAction::PropertiesUpdate,
  DocAction::Update,
  DocAction::AnalyticsRead,
  DocAction::AnalyticsViewersRead,
  DocAction::Publish,
  DocAction::Unpublish,
  DocAction::Trash,
  DocAction::Restore,
  DocAction::Delete,
  DocAction::UsersManage,
  DocAction::CommentsModerate,
  DocAction::TransferOwner,
  DocAction::Preview,
];

pub fn workspace_action_catalog() -> &'static [WorkspaceAction] {
  WORKSPACE_ACTIONS
}
pub fn doc_action_catalog() -> &'static [DocAction] {
  DOC_ACTIONS
}