mirror of
https://github.com/meilisearch/meilisearch.git
synced 2024-11-25 19:45:05 +08:00
Make Actions usable as bitflags
This commit is contained in:
parent
4b8dd6dd6b
commit
56b5289b2f
@ -183,41 +183,59 @@ fn parse_expiration_date(
|
|||||||
bitflags! {
|
bitflags! {
|
||||||
#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash, PartialOrd, Ord)]
|
#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash, PartialOrd, Ord)]
|
||||||
#[repr(transparent)]
|
#[repr(transparent)]
|
||||||
pub struct Action: u8 {
|
pub struct Action: u32 {
|
||||||
const All = 0;
|
|
||||||
const Search = 1;
|
const Search = 1;
|
||||||
const DocumentsAll = 2;
|
// Documents
|
||||||
const DocumentsAdd = 3;
|
const DocumentsAdd = 1 << 1;
|
||||||
const DocumentsGet = 4;
|
const DocumentsGet = 1 << 2;
|
||||||
const DocumentsDelete = 5;
|
const DocumentsDelete = 1 << 3;
|
||||||
const IndexesAll = 6;
|
const DocumentsAll = Self::DocumentsAdd.repr() | Self::DocumentsGet.repr() | Self::DocumentsDelete.repr();
|
||||||
const IndexesAdd = 7;
|
// Indexes
|
||||||
const IndexesGet = 8;
|
const IndexesAdd = 1 << 4;
|
||||||
const IndexesUpdate = 9;
|
const IndexesGet = 1 << 5;
|
||||||
const IndexesDelete = 10;
|
const IndexesUpdate = 1 << 6;
|
||||||
const IndexesSwap = 11;
|
const IndexesDelete = 1 << 7;
|
||||||
const TasksAll = 12;
|
const IndexesSwap = 1 << 8;
|
||||||
const TasksCancel = 13;
|
const IndexesAll = Self::IndexesAdd.repr() | Self::IndexesGet.repr() | Self::IndexesUpdate.repr() | Self::IndexesDelete.repr() | Self::IndexesSwap.repr();
|
||||||
const TasksDelete = 14;
|
// Tasks
|
||||||
const TasksGet = 15;
|
const TasksCancel = 1 << 9;
|
||||||
const SettingsAll = 16;
|
const TasksDelete = 1 << 10;
|
||||||
const SettingsGet = 17;
|
const TasksGet = 1 << 11;
|
||||||
const SettingsUpdate = 18;
|
const TasksAll = Self::TasksCancel.repr() | Self::TasksDelete.repr() | Self::TasksGet.repr();
|
||||||
const StatsAll = 19;
|
// Settings
|
||||||
const StatsGet = 20;
|
const SettingsGet = 1 << 12;
|
||||||
const MetricsAll = 21;
|
const SettingsUpdate = 1 << 13;
|
||||||
const MetricsGet = 22;
|
const SettingsAll = Self::SettingsGet.repr() | Self::SettingsUpdate.repr();
|
||||||
const DumpsAll = 23;
|
// Stats
|
||||||
const DumpsCreate = 24;
|
const StatsGet = 1 << 14;
|
||||||
const SnapshotsAll = 25;
|
const StatsAll = Self::StatsGet.repr();
|
||||||
const SnapshotsCreate = 26;
|
// Metrics
|
||||||
const Version = 27;
|
const MetricsGet = 1 << 15;
|
||||||
const KeysAdd = 28;
|
const MetricsAll = Self::MetricsGet.repr();
|
||||||
const KeysGet = 29;
|
// Dumps
|
||||||
const KeysUpdate = 30;
|
const DumpsCreate = 1 << 16;
|
||||||
const KeysDelete = 31;
|
const DumpsAll = Self::DumpsCreate.repr();
|
||||||
const ExperimentalFeaturesGet = 32;
|
// Snapshots
|
||||||
const ExperimentalFeaturesUpdate = 33;
|
const SnapshotsCreate = 1 << 17;
|
||||||
|
const SnapshotsAll = Self::SnapshotsCreate.repr();
|
||||||
|
const Version = 1 << 18;
|
||||||
|
const KeysAdd = 1 << 19;
|
||||||
|
const KeysGet = 1 << 20;
|
||||||
|
const KeysUpdate = 1 << 21;
|
||||||
|
const KeysDelete = 1 << 22;
|
||||||
|
const ExperimentalFeaturesGet = 1 << 23;
|
||||||
|
const ExperimentalFeaturesUpdate = 1 << 24;
|
||||||
|
const All = {
|
||||||
|
let mut all = 0;
|
||||||
|
|
||||||
|
let mut exp = 0;
|
||||||
|
while exp < 24 {
|
||||||
|
all |= 1 << exp;
|
||||||
|
exp += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
all
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -271,38 +289,40 @@ impl Action {
|
|||||||
.iter()
|
.iter()
|
||||||
.find(|(_, action)| v == action)
|
.find(|(_, action)| v == action)
|
||||||
.map(|(serde_name, _)| serde_name)
|
.map(|(serde_name, _)| serde_name)
|
||||||
// actions should always have matching serialized values
|
.expect("an action doesn't have a matching serialized value")
|
||||||
.unwrap()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub const fn from_repr(repr: u8) -> Option<Self> {
|
pub const fn from_repr(repr: u32) -> Option<Self> {
|
||||||
use actions::*;
|
use actions::*;
|
||||||
match repr {
|
match repr {
|
||||||
ALL => Some(Self::All),
|
|
||||||
SEARCH => Some(Self::Search),
|
SEARCH => Some(Self::Search),
|
||||||
DOCUMENTS_ALL => Some(Self::DocumentsAll),
|
|
||||||
DOCUMENTS_ADD => Some(Self::DocumentsAdd),
|
DOCUMENTS_ADD => Some(Self::DocumentsAdd),
|
||||||
DOCUMENTS_GET => Some(Self::DocumentsGet),
|
DOCUMENTS_GET => Some(Self::DocumentsGet),
|
||||||
DOCUMENTS_DELETE => Some(Self::DocumentsDelete),
|
DOCUMENTS_DELETE => Some(Self::DocumentsDelete),
|
||||||
INDEXES_ALL => Some(Self::IndexesAll),
|
DOCUMENTS_ALL => Some(Self::DocumentsAll),
|
||||||
INDEXES_CREATE => Some(Self::IndexesAdd),
|
INDEXES_CREATE => Some(Self::IndexesAdd),
|
||||||
INDEXES_GET => Some(Self::IndexesGet),
|
INDEXES_GET => Some(Self::IndexesGet),
|
||||||
INDEXES_UPDATE => Some(Self::IndexesUpdate),
|
INDEXES_UPDATE => Some(Self::IndexesUpdate),
|
||||||
INDEXES_DELETE => Some(Self::IndexesDelete),
|
INDEXES_DELETE => Some(Self::IndexesDelete),
|
||||||
INDEXES_SWAP => Some(Self::IndexesSwap),
|
INDEXES_SWAP => Some(Self::IndexesSwap),
|
||||||
TASKS_ALL => Some(Self::TasksAll),
|
INDEXES_ALL => Some(Self::IndexesAll),
|
||||||
TASKS_CANCEL => Some(Self::TasksCancel),
|
TASKS_CANCEL => Some(Self::TasksCancel),
|
||||||
TASKS_DELETE => Some(Self::TasksDelete),
|
TASKS_DELETE => Some(Self::TasksDelete),
|
||||||
TASKS_GET => Some(Self::TasksGet),
|
TASKS_GET => Some(Self::TasksGet),
|
||||||
SETTINGS_ALL => Some(Self::SettingsAll),
|
TASKS_ALL => Some(Self::TasksAll),
|
||||||
SETTINGS_GET => Some(Self::SettingsGet),
|
SETTINGS_GET => Some(Self::SettingsGet),
|
||||||
SETTINGS_UPDATE => Some(Self::SettingsUpdate),
|
SETTINGS_UPDATE => Some(Self::SettingsUpdate),
|
||||||
STATS_ALL => Some(Self::StatsAll),
|
SETTINGS_ALL => Some(Self::SettingsAll),
|
||||||
STATS_GET => Some(Self::StatsGet),
|
STATS_GET => Some(Self::StatsGet),
|
||||||
METRICS_ALL => Some(Self::MetricsAll),
|
// @TODO: Issue: Since stats has only one element, all is the same as the one single element
|
||||||
|
// so this will never match all, because it matches that one and only element first
|
||||||
|
STATS_ALL => Some(Self::StatsAll),
|
||||||
METRICS_GET => Some(Self::MetricsGet),
|
METRICS_GET => Some(Self::MetricsGet),
|
||||||
DUMPS_ALL => Some(Self::DumpsAll),
|
// @TODO: Same
|
||||||
|
METRICS_ALL => Some(Self::MetricsAll),
|
||||||
DUMPS_CREATE => Some(Self::DumpsCreate),
|
DUMPS_CREATE => Some(Self::DumpsCreate),
|
||||||
|
// @TODO: Same
|
||||||
|
DUMPS_ALL => Some(Self::DumpsAll),
|
||||||
SNAPSHOTS_CREATE => Some(Self::SnapshotsCreate),
|
SNAPSHOTS_CREATE => Some(Self::SnapshotsCreate),
|
||||||
VERSION => Some(Self::Version),
|
VERSION => Some(Self::Version),
|
||||||
KEYS_CREATE => Some(Self::KeysAdd),
|
KEYS_CREATE => Some(Self::KeysAdd),
|
||||||
@ -311,11 +331,12 @@ impl Action {
|
|||||||
KEYS_DELETE => Some(Self::KeysDelete),
|
KEYS_DELETE => Some(Self::KeysDelete),
|
||||||
EXPERIMENTAL_FEATURES_GET => Some(Self::ExperimentalFeaturesGet),
|
EXPERIMENTAL_FEATURES_GET => Some(Self::ExperimentalFeaturesGet),
|
||||||
EXPERIMENTAL_FEATURES_UPDATE => Some(Self::ExperimentalFeaturesUpdate),
|
EXPERIMENTAL_FEATURES_UPDATE => Some(Self::ExperimentalFeaturesUpdate),
|
||||||
|
ALL => Some(Self::All),
|
||||||
_otherwise => None,
|
_otherwise => None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub const fn repr(&self) -> u8 {
|
pub const fn repr(&self) -> u32 {
|
||||||
self.bits()
|
self.bits()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -419,37 +440,37 @@ impl Sequence for Action {
|
|||||||
pub mod actions {
|
pub mod actions {
|
||||||
use super::Action as A;
|
use super::Action as A;
|
||||||
|
|
||||||
pub(crate) const ALL: u8 = A::All.repr();
|
pub const SEARCH: u32 = A::Search.repr();
|
||||||
pub const SEARCH: u8 = A::Search.repr();
|
pub const DOCUMENTS_ADD: u32 = A::DocumentsAdd.repr();
|
||||||
pub const DOCUMENTS_ALL: u8 = A::DocumentsAll.repr();
|
pub const DOCUMENTS_GET: u32 = A::DocumentsGet.repr();
|
||||||
pub const DOCUMENTS_ADD: u8 = A::DocumentsAdd.repr();
|
pub const DOCUMENTS_DELETE: u32 = A::DocumentsDelete.repr();
|
||||||
pub const DOCUMENTS_GET: u8 = A::DocumentsGet.repr();
|
pub const DOCUMENTS_ALL: u32 = A::DocumentsAll.repr();
|
||||||
pub const DOCUMENTS_DELETE: u8 = A::DocumentsDelete.repr();
|
pub const INDEXES_CREATE: u32 = A::IndexesAdd.repr();
|
||||||
pub const INDEXES_ALL: u8 = A::IndexesAll.repr();
|
pub const INDEXES_GET: u32 = A::IndexesGet.repr();
|
||||||
pub const INDEXES_CREATE: u8 = A::IndexesAdd.repr();
|
pub const INDEXES_UPDATE: u32 = A::IndexesUpdate.repr();
|
||||||
pub const INDEXES_GET: u8 = A::IndexesGet.repr();
|
pub const INDEXES_DELETE: u32 = A::IndexesDelete.repr();
|
||||||
pub const INDEXES_UPDATE: u8 = A::IndexesUpdate.repr();
|
pub const INDEXES_SWAP: u32 = A::IndexesSwap.repr();
|
||||||
pub const INDEXES_DELETE: u8 = A::IndexesDelete.repr();
|
pub const INDEXES_ALL: u32 = A::IndexesAll.repr();
|
||||||
pub const INDEXES_SWAP: u8 = A::IndexesSwap.repr();
|
pub const TASKS_CANCEL: u32 = A::TasksCancel.repr();
|
||||||
pub const TASKS_ALL: u8 = A::TasksAll.repr();
|
pub const TASKS_DELETE: u32 = A::TasksDelete.repr();
|
||||||
pub const TASKS_CANCEL: u8 = A::TasksCancel.repr();
|
pub const TASKS_GET: u32 = A::TasksGet.repr();
|
||||||
pub const TASKS_DELETE: u8 = A::TasksDelete.repr();
|
pub const TASKS_ALL: u32 = A::TasksAll.repr();
|
||||||
pub const TASKS_GET: u8 = A::TasksGet.repr();
|
pub const SETTINGS_GET: u32 = A::SettingsGet.repr();
|
||||||
pub const SETTINGS_ALL: u8 = A::SettingsAll.repr();
|
pub const SETTINGS_UPDATE: u32 = A::SettingsUpdate.repr();
|
||||||
pub const SETTINGS_GET: u8 = A::SettingsGet.repr();
|
pub const SETTINGS_ALL: u32 = A::SettingsAll.repr();
|
||||||
pub const SETTINGS_UPDATE: u8 = A::SettingsUpdate.repr();
|
pub const STATS_GET: u32 = A::StatsGet.repr();
|
||||||
pub const STATS_ALL: u8 = A::StatsAll.repr();
|
pub const STATS_ALL: u32 = A::StatsAll.repr();
|
||||||
pub const STATS_GET: u8 = A::StatsGet.repr();
|
pub const METRICS_GET: u32 = A::MetricsGet.repr();
|
||||||
pub const METRICS_ALL: u8 = A::MetricsAll.repr();
|
pub const METRICS_ALL: u32 = A::MetricsAll.repr();
|
||||||
pub const METRICS_GET: u8 = A::MetricsGet.repr();
|
pub const DUMPS_CREATE: u32 = A::DumpsCreate.repr();
|
||||||
pub const DUMPS_ALL: u8 = A::DumpsAll.repr();
|
pub const DUMPS_ALL: u32 = A::DumpsAll.repr();
|
||||||
pub const DUMPS_CREATE: u8 = A::DumpsCreate.repr();
|
pub const SNAPSHOTS_CREATE: u32 = A::SnapshotsCreate.repr();
|
||||||
pub const SNAPSHOTS_CREATE: u8 = A::SnapshotsCreate.repr();
|
pub const VERSION: u32 = A::Version.repr();
|
||||||
pub const VERSION: u8 = A::Version.repr();
|
pub const KEYS_CREATE: u32 = A::KeysAdd.repr();
|
||||||
pub const KEYS_CREATE: u8 = A::KeysAdd.repr();
|
pub const KEYS_GET: u32 = A::KeysGet.repr();
|
||||||
pub const KEYS_GET: u8 = A::KeysGet.repr();
|
pub const KEYS_UPDATE: u32 = A::KeysUpdate.repr();
|
||||||
pub const KEYS_UPDATE: u8 = A::KeysUpdate.repr();
|
pub const KEYS_DELETE: u32 = A::KeysDelete.repr();
|
||||||
pub const KEYS_DELETE: u8 = A::KeysDelete.repr();
|
pub const EXPERIMENTAL_FEATURES_GET: u32 = A::ExperimentalFeaturesGet.repr();
|
||||||
pub const EXPERIMENTAL_FEATURES_GET: u8 = A::ExperimentalFeaturesGet.repr();
|
pub const EXPERIMENTAL_FEATURES_UPDATE: u32 = A::ExperimentalFeaturesUpdate.repr();
|
||||||
pub const EXPERIMENTAL_FEATURES_UPDATE: u8 = A::ExperimentalFeaturesUpdate.repr();
|
pub(crate) const ALL: u32 = A::All.repr();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user