From a7a9a71e80ec2db1ce40209235051103dfcfa93f Mon Sep 17 00:00:00 2001 From: yyc12345 Date: Fri, 17 Apr 2026 15:24:22 +0800 Subject: [PATCH] feat: update wfassoc-exec --- Cargo.lock | 1 + wfassoc-exec/Cargo.toml | 2 +- wfassoc-exec/src/main.rs | 11 ++-- wfassoc-exec/src/manifest.rs | 115 +++++++++++++++-------------------- wfassoc/src/highlevel.rs | 41 +++++++++---- 5 files changed, 87 insertions(+), 83 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f39aac8..a296b0c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -763,6 +763,7 @@ dependencies = [ "serde", "thiserror", "toml 0.9.8", + "wfassoc", ] [[package]] diff --git a/wfassoc-exec/Cargo.toml b/wfassoc-exec/Cargo.toml index d1c4452..6bbee72 100644 --- a/wfassoc-exec/Cargo.toml +++ b/wfassoc-exec/Cargo.toml @@ -8,7 +8,7 @@ license = "SPDX:MIT" [dependencies] thiserror = { workspace = true } -#wfassoc = { path="../wfassoc" } +wfassoc = { path="../wfassoc" } clap = { version="4.5.48", features=["derive"]} serde = { version = "1.0.228", features=["derive"]} toml = "0.9.8" diff --git a/wfassoc-exec/src/main.rs b/wfassoc-exec/src/main.rs index bb84080..7d92901 100644 --- a/wfassoc-exec/src/main.rs +++ b/wfassoc-exec/src/main.rs @@ -11,21 +11,24 @@ use thiserror::Error as TeError; enum Error { /// Error when parsing manifest TOML file. #[error("{0}")] - Manifest(#[from] manifest::Error), + ParseManifest(#[from] manifest::ParseManifestError), + /// Error when parsing manifest into schema. + #[error("{0}")] + ParseSchema(#[from] manifest::ParseSchemaError), } /// Result type used in this executable. type Result = std::result::Result; fn runner() -> Result<()> { - let raw_mf = manifest::RawManifest::from_file(Path::new(r#"D:\Repo\wfassoc\example\ppic.toml"#))?; + let mf = manifest::Manifest::from_file(Path::new(r#"D:\Repo\wfassoc\example\manifest\ppic.toml"#))?; //let mf = raw_mf.to_checked()?; - println!("{:?}", raw_mf); + println!("{:?}", mf); Ok(()) } fn main() { - let cli = cli::parse(); + //let cli = cli::parse(); runner().unwrap_or_else(|e| { eprintln!("Runtime error: {}.", e); diff --git a/wfassoc-exec/src/manifest.rs b/wfassoc-exec/src/manifest.rs index e896a3d..c206b8a 100644 --- a/wfassoc-exec/src/manifest.rs +++ b/wfassoc-exec/src/manifest.rs @@ -3,10 +3,45 @@ use std::collections::HashMap; use std::path::Path; use thiserror::Error as TeError; use toml; +use wfassoc; -/// Error occurs in this module. +// region: Manifest + +/// Raw user input manifest. +/// +/// This manifest is the raw input of user. +/// Some fields may not be checked due to user invalid input. +#[derive(Debug, Deserialize)] +pub struct Manifest { + identifier: String, + path: String, + clsid: String, + + name: Option, + icon: Option, + behavior: Option, + + strs: HashMap, + icons: HashMap, + behaviors: HashMap, + exts: HashMap, +} + +/// The sub-type in raw user input manifest. +#[derive(Debug, Deserialize)] +pub struct ManifestExt { + name: String, + icon: String, + behavior: String, +} + +// endregion + +// region: Manifest Operation + +/// Error occurs when parsing manifest TOML file. #[derive(Debug, TeError)] -pub enum Error { +pub enum ParseManifestError { /// Io error #[error("IO error when reading manifest file")] Io(#[from] std::io::Error), @@ -15,77 +50,27 @@ pub enum Error { Toml(#[from] toml::de::Error), } -/// Result type used in this module. -type Result = std::result::Result; - -// region: Raw Manifest - -/// Raw user input manifest. -/// -/// This manifest is the raw input of user. -/// Some fields may not be checked due to user invalid input. -#[derive(Debug, Deserialize)] -pub struct RawManifest { - identifier: String, - path: String, - clsid: String, - icons: HashMap, - behaviors: HashMap, - exts: HashMap, -} - -impl RawManifest { - pub fn into_checked(&self) -> Result { - todo!() - } -} - -/// The sub-type in raw user input manifest. -#[derive(Debug, Deserialize)] -pub struct RawManifestExt { - name: String, - icon: String, - behavior: String, -} - -impl RawManifestExt { - pub fn into_checked(&self) -> Result { - todo!() - } -} - -impl RawManifest { - /// Read raw user manifest. - pub fn from_file(path: &Path) -> Result { +impl Manifest { + /// Read user manifest. + pub fn from_file(path: &Path) -> Result { let contents = std::fs::read_to_string(path)?; - let config: RawManifest = toml::from_str(&contents)?; + let config: Manifest = toml::from_str(&contents)?; Ok(config) } } -// endregion - -// region: Checked Manifest - -/// Converted user input manifest. -/// -/// This manifest struct is prepared for final use. -/// All fields loacted in this struct is checked and ready to be used. -#[derive(Debug)] -pub struct Manifest { - +/// Error occurs when parsing manifest into schema. +#[derive(Debug, TeError)] +pub enum ParseSchemaError { + } -impl Manifest { - -} - -pub struct ManifestExt { - -} - -impl ManifestExt { +impl TryFrom for wfassoc::Schema { + type Error = ParseSchemaError; + fn try_from(value: Manifest) -> std::result::Result { + todo!() + } } // endregion diff --git a/wfassoc/src/highlevel.rs b/wfassoc/src/highlevel.rs index edd81f0..dc0e7aa 100644 --- a/wfassoc/src/highlevel.rs +++ b/wfassoc/src/highlevel.rs @@ -6,12 +6,17 @@ pub use lowlevel::{Scope, View}; // region: Error Type -/// Error occurs in this module. +/// Error occurs when operating with `Schema`. #[derive(Debug, TeError)] -pub enum Error {} +pub enum SchemaError {} -/// Result type used in this module. -type Result = std::result::Result; +/// Error occurs when trying converting `Schema` into `Program`. +#[derive(Debug, TeError)] +pub enum ParseProgramError {} + +/// Error occurs when operating with `Program`. +#[derive(Debug, TeError)] +pub enum ProgramError {} // endregion @@ -24,6 +29,12 @@ pub struct Schema { identifier: String, path: String, clsid: String, + + name: Option, + icon: Option, + behavior: Option, + + strs: HashMap, icons: HashMap, behaviors: HashMap, exts: HashMap, @@ -43,29 +54,33 @@ impl Schema { identifier: String::new(), path: String::new(), clsid: String::new(), + name: None, + icon: None, + behavior: None, + strs: HashMap::new(), icons: HashMap::new(), behaviors: HashMap::new(), exts: HashMap::new(), } } - pub fn set_identifier(&mut self, identifier: &str) -> Result<()> { + pub fn set_identifier(&mut self, identifier: &str) -> Result<(), SchemaError> { todo!() } - pub fn set_path(&mut self, exe_path: &str) -> Result<()> { + pub fn set_path(&mut self, exe_path: &str) -> Result<(), SchemaError> { todo!() } - pub fn set_clsid(&mut self, clsid: &str) -> Result<()> { + pub fn set_clsid(&mut self, clsid: &str) -> Result<(), SchemaError> { todo!() } - pub fn add_icon(&mut self, name: &str, value: &str) -> Result<()> { + pub fn add_icon(&mut self, name: &str, value: &str) -> Result<(), SchemaError> { todo!() } - pub fn add_behavior(&mut self, name: &str, value: &str) -> Result<()> { + pub fn add_behavior(&mut self, name: &str, value: &str) -> Result<(), SchemaError> { todo!() } @@ -75,11 +90,11 @@ impl Schema { ext_name: &str, ext_icon: &str, ext_behavior: &str, - ) -> Result<()> { + ) -> Result<(), SchemaError> { todo!() } - pub fn into_program(self) -> Result { + pub fn into_program(self) -> Result { Program::new(self) } } @@ -88,7 +103,7 @@ impl Schema { pub struct Program {} impl TryFrom for Program { - type Error = Error; + type Error = ParseProgramError; fn try_from(value: Schema) -> std::result::Result { Self::new(value) @@ -96,7 +111,7 @@ impl TryFrom for Program { } impl Program { - pub fn new(schema: Schema) -> Result { + pub fn new(schema: Schema) -> Result { todo!() } }