Test Gitea Runner functionality

This commit is contained in:
Warren
2026-05-30 14:08:55 +08:00
parent 596d8d5e27
commit b362e9b3f1
44 changed files with 1 additions and 0 deletions

43
filetree/src/mode.rs Normal file
View File

@@ -0,0 +1,43 @@
use async_trait::async_trait;
use serde_json::Value;
use crate::filetree::FileTree;
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct SortOption {
pub key: String,
pub label: String,
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct FilterOption {
pub key: String,
pub label: String,
}
#[async_trait]
pub trait DisplayMode: Send + Sync {
fn name(&self) -> &'static str;
fn render(&self, tree: &FileTree) -> Value;
fn sort_options(&self) -> Vec<SortOption>;
fn filter_options(&self) -> Vec<FilterOption>;
}
pub fn get_mode(name: &str) -> Option<Box<dyn DisplayMode>> {
match name {
"tree" => Some(Box::new(crate::filetree::modes::tree::TreeMode)),
"list" => Some(Box::new(crate::filetree::modes::list::ListMode)),
"grid_sm" => Some(Box::new(crate::filetree::modes::grid_sm::GridSmMode)),
"grid_lg" => Some(Box::new(crate::filetree::modes::grid_lg::GridLgMode)),
_ => None,
}
}
pub fn list_modes() -> Vec<Box<dyn DisplayMode>> {
vec![
Box::new(crate::filetree::modes::list::ListMode),
Box::new(crate::filetree::modes::tree::TreeMode),
Box::new(crate::filetree::modes::grid_sm::GridSmMode),
Box::new(crate::filetree::modes::grid_lg::GridLgMode),
]
}