use serde::{Deserialize, Serialize};
use std::collections::HashSet;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Deserialize, Serialize)]
#[serde(rename_all = "snake_case")]
pub enum ApiPermission {
Rpc,
RpcRead,
RpcWrite,
Admin,
}
impl ApiPermission {
pub fn all() -> HashSet<Self> {
use ApiPermission::*;
[Rpc, RpcRead, RpcWrite, Admin].into_iter().collect()
}
pub fn read_only() -> HashSet<Self> {
use ApiPermission::*;
[RpcRead].into_iter().collect()
}
pub fn implies(&self, other: &Self) -> bool {
match self {
Self::Admin => true,
Self::Rpc => matches!(other, Self::RpcRead | Self::RpcWrite),
_ => self == other,
}
}
}