use crate::{ValkyrieError, ValkyrieResult};
#[repr(u8)]
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
pub enum FeatureType {
Allow,
Warning,
Deny,
Forbid,
}
impl Default for FeatureType {
fn default() -> Self {
Self::Allow
}
}
impl FeatureType {
pub fn allow(&mut self) -> ValkyrieResult<()> {
match self {
FeatureType::Forbid => Err(ValkyrieError::custom("License is forbidden")),
_ => {
*self = FeatureType::Allow;
Ok(())
}
}
}
pub fn warn(&mut self) -> ValkyrieResult<()> {
match self {
FeatureType::Forbid => Err(ValkyrieError::custom("License is forbidden")),
_ => {
*self = FeatureType::Warning;
Ok(())
}
}
}
pub fn deny(&mut self) -> ValkyrieResult<()> {
match self {
FeatureType::Forbid => Err(ValkyrieError::custom("License is forbidden")),
_ => {
*self = FeatureType::Deny;
Ok(())
}
}
}
pub fn forbid(&mut self) -> ValkyrieResult<()> {
match self {
FeatureType::Forbid => Err(ValkyrieError::custom("License is forbidden")),
_ => {
*self = FeatureType::Forbid;
Ok(())
}
}
}
}
#[repr(u8)]
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
pub enum MutableType {
Immutable,
Once,
Mutable,
}
impl Default for MutableType {
fn default() -> Self {
Self::Immutable
}
}
fn mutable_type_to_str(mutable_type: MutableType) -> &'static str {
match mutable_type {
MutableType::Immutable => "immutable",
MutableType::Once => "once",
MutableType::Mutable => "mutable",
}
}
#[repr(u8)]
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
pub enum InitializeType {
Constant,
Immutable,
Mutable,
Readonly,
Lazy,
OnceLate,
MutableLate,
}
impl Default for InitializeType {
fn default() -> Self {
Self::Immutable
}
}
#[repr(u8)]
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
pub enum CurryType {
None,
Curried,
Deferred,
}
#[repr(u8)]
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
pub enum InlineType {
Never,
Normal,
Aggressive,
Always,
}
#[repr(u8)]
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
pub enum AccessType {
Public,
Private,
Protected,
Internal,
}