Initial commit

This commit is contained in:
Uber Veng
2026-03-14 03:14:59 +07:00
commit f958e704f6
14 changed files with 4477 additions and 0 deletions

80
src/menu.rs Normal file
View File

@@ -0,0 +1,80 @@
use serde::Deserialize;
use std::collections::HashMap;
#[derive(Debug, Deserialize, Clone)]
pub struct MenuRoot {
pub version: String,
pub menu: Vec<MenuItem>,
}
#[derive(Debug, Deserialize, Clone)]
pub struct MenuItem {
pub id: String,
pub title: String,
pub description: Option<String>,
#[serde(flatten)]
pub kind: MenuItemKind,
}
#[derive(Debug, Deserialize, Clone)]
#[serde(untagged)]
pub enum MenuItemKind {
Category { children: Vec<MenuItem> },
Action { action: Action },
}
#[derive(Debug, Deserialize, Clone)]
#[serde(tag = "type", rename_all = "lowercase")]
pub enum Action {
Bash {
script: String,
#[serde(default = "default_interaction")]
interaction: InteractionMode,
#[serde(default)]
confirm: bool,
},
Download {
url: String,
filename: Option<String>,
target_dir: Option<String>,
#[serde(default)]
confirm: bool,
},
DownloadAndRun {
url: String,
filename: Option<String>,
run_args: Vec<String>,
#[serde(default)]
keep_file: bool,
#[serde(default)]
confirm: bool,
},
HttpRequest {
method: HttpMethod,
url: String,
headers: std::collections::HashMap<String, String>,
body: Option<String>,
#[serde(default)]
confirm: bool,
},
}
#[derive(Debug, Deserialize, Clone)]
#[serde(rename_all = "lowercase")]
pub enum InteractionMode {
Terminal,
Structured,
}
fn default_interaction() -> InteractionMode {
InteractionMode::Terminal
}
#[derive(Debug, Deserialize, Clone)]
#[serde(rename_all = "UPPERCASE")]
pub enum HttpMethod {
Get,
Post,
Put,
Delete,
}