use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum MemoryScope {
User,
Project,
Repo,
Task,
Session,
Run,
}
impl MemoryScope {
pub fn name(&self) -> &str {
match self {
Self::User => "user",
Self::Project => "project",
Self::Repo => "repo",
Self::Task => "task",
Self::Session => "session",
Self::Run => "run",
}
}
pub fn priority(&self) -> u8 {
match self {
Self::User => 0,
Self::Project => 1,
Self::Repo => 2,
Self::Task => 3,
Self::Session => 4,
Self::Run => 5,
}
}
pub fn is_persistent(&self) -> bool {
matches!(self, Self::User | Self::Project | Self::Repo)
}
pub fn all() -> [Self; 6] {
[
Self::User,
Self::Project,
Self::Repo,
Self::Task,
Self::Session,
Self::Run,
]
}
pub fn from_str(s: &str) -> Option<Self> {
match s.to_lowercase().as_str() {
"user" => Some(Self::User),
"project" | "proj" => Some(Self::Project),
"repo" => Some(Self::Repo),
"task" => Some(Self::Task),
"session" | "sess" => Some(Self::Session),
"run" => Some(Self::Run),
_ => None,
}
}
}