mirror of
https://github.com/sxyazi/yazi.git
synced 2026-07-21 23:01:05 +00:00
refactor: introduces the validator (#57)
This commit is contained in:
parent
80619597d3
commit
35ca32e74b
6 changed files with 142 additions and 17 deletions
102
Cargo.lock
generated
102
Cargo.lock
generated
|
|
@ -308,7 +308,7 @@ dependencies = [
|
|||
"heck",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.28",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -356,6 +356,7 @@ dependencies = [
|
|||
"shared",
|
||||
"shell-words",
|
||||
"toml",
|
||||
"validator",
|
||||
"xdg",
|
||||
]
|
||||
|
||||
|
|
@ -696,7 +697,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
|
|||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.28",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -840,6 +841,12 @@ dependencies = [
|
|||
"unicode-normalization",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "if_chain"
|
||||
version = "1.0.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cb56e1aa765b4b4f3aadfab769793b7087bb03a4ea4920644a6d238e2df5b9ed"
|
||||
|
||||
[[package]]
|
||||
name = "image"
|
||||
version = "0.24.7"
|
||||
|
|
@ -1266,7 +1273,7 @@ checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405"
|
|||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.28",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -1314,6 +1321,30 @@ dependencies = [
|
|||
"miniz_oxide",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro-error"
|
||||
version = "1.0.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
|
||||
dependencies = [
|
||||
"proc-macro-error-attr",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 1.0.109",
|
||||
"version_check",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro-error-attr"
|
||||
version = "1.0.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"version_check",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "1.0.66"
|
||||
|
|
@ -1488,7 +1519,7 @@ checksum = "aafe972d60b0b9bee71a91b92fee2d4fb3c9d7e8f6b179aa99f27203d99a4816"
|
|||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.28",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -1626,6 +1657,17 @@ version = "0.10.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "1.0.109"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "2.0.28"
|
||||
|
|
@ -1675,7 +1717,7 @@ checksum = "090198534930841fab3a5d1bb637cde49e339654e606195f8d9c76eeb081dc96"
|
|||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.28",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -1770,7 +1812,7 @@ checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
|
|||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.28",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -1839,7 +1881,7 @@ checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab"
|
|||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.28",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -1949,6 +1991,48 @@ version = "0.2.1"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
|
||||
|
||||
[[package]]
|
||||
name = "validator"
|
||||
version = "0.16.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b92f40481c04ff1f4f61f304d61793c7b56ff76ac1469f1beb199b1445b253bd"
|
||||
dependencies = [
|
||||
"idna",
|
||||
"lazy_static",
|
||||
"regex",
|
||||
"serde",
|
||||
"serde_derive",
|
||||
"serde_json",
|
||||
"url",
|
||||
"validator_derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "validator_derive"
|
||||
version = "0.16.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bc44ca3088bb3ba384d9aecf40c6a23a676ce23e09bdaca2073d99c207f864af"
|
||||
dependencies = [
|
||||
"if_chain",
|
||||
"lazy_static",
|
||||
"proc-macro-error",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"regex",
|
||||
"syn 1.0.109",
|
||||
"validator_types",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "validator_types"
|
||||
version = "0.16.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "111abfe30072511849c5910134e8baf8dc05de4c0e5903d681cbd5c9c4d611e3"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"syn 1.0.109",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "valuable"
|
||||
version = "0.1.0"
|
||||
|
|
@ -1998,7 +2082,7 @@ dependencies = [
|
|||
"once_cell",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.28",
|
||||
"wasm-bindgen-shared",
|
||||
]
|
||||
|
||||
|
|
@ -2020,7 +2104,7 @@ checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
|
|||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.28",
|
||||
"wasm-bindgen-backend",
|
||||
"wasm-bindgen-shared",
|
||||
]
|
||||
|
|
|
|||
|
|
@ -20,4 +20,5 @@ regex = "^1"
|
|||
serde = { version = "^1", features = [ "derive" ] }
|
||||
shell-words = "^1"
|
||||
toml = { version = "^0", features = [ "preserve_order" ] }
|
||||
validator = { version = "^0", features = [ "derive" ] }
|
||||
xdg = "^2"
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ mod preset;
|
|||
pub mod preview;
|
||||
pub mod tasks;
|
||||
pub mod theme;
|
||||
mod validation;
|
||||
|
||||
pub(crate) use pattern::*;
|
||||
pub(crate) use preset::*;
|
||||
|
|
|
|||
|
|
@ -1,11 +1,15 @@
|
|||
use serde::Deserialize;
|
||||
use validator::Validate;
|
||||
|
||||
use crate::MERGED_YAZI;
|
||||
use crate::{validation::check_validation, MERGED_YAZI};
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
#[derive(Debug, Deserialize, Validate)]
|
||||
pub struct Tasks {
|
||||
#[validate(range(min = 3, message = "Cannot be less than 3"))]
|
||||
pub micro_workers: u8,
|
||||
#[validate(range(min = 5, message = "Cannot be less than 5"))]
|
||||
pub macro_workers: u8,
|
||||
#[validate(range(min = 3, message = "Cannot be less than 3"))]
|
||||
pub bizarre_retry: u8,
|
||||
}
|
||||
|
||||
|
|
@ -17,9 +21,7 @@ impl Default for Tasks {
|
|||
}
|
||||
|
||||
let tasks = toml::from_str::<Outer>(&MERGED_YAZI).unwrap().tasks;
|
||||
if tasks.micro_workers <= 2 || tasks.macro_workers <= 2 {
|
||||
panic!("micro_workers, and macro_workers must be greater than 2");
|
||||
}
|
||||
check_validation(tasks.validate());
|
||||
|
||||
tasks
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,15 +2,17 @@ use std::path::PathBuf;
|
|||
|
||||
use serde::Deserialize;
|
||||
use shared::absolute_path;
|
||||
use validator::Validate;
|
||||
|
||||
use super::{ColorGroup, Filetype, Icon, Style};
|
||||
use crate::MERGED_THEME;
|
||||
use crate::{validation::check_validation, MERGED_THEME};
|
||||
|
||||
#[derive(Deserialize)]
|
||||
#[derive(Deserialize, Validate)]
|
||||
pub struct Tab {
|
||||
pub active: Style,
|
||||
pub inactive: Style,
|
||||
pub max_width: usize,
|
||||
#[validate(range(min = 1, message = "Must be greater than 0"))]
|
||||
pub max_width: u8,
|
||||
}
|
||||
|
||||
#[derive(Deserialize)]
|
||||
|
|
@ -73,8 +75,12 @@ pub struct Theme {
|
|||
impl Default for Theme {
|
||||
fn default() -> Self {
|
||||
let mut theme: Self = toml::from_str(&MERGED_THEME).unwrap();
|
||||
|
||||
check_validation(theme.tab.validate());
|
||||
|
||||
theme.preview.syntect_theme =
|
||||
futures::executor::block_on(absolute_path(&theme.preview.syntect_theme));
|
||||
|
||||
theme
|
||||
}
|
||||
}
|
||||
|
|
|
|||
31
config/src/validation.rs
Normal file
31
config/src/validation.rs
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
use std::{borrow::Cow, process};
|
||||
|
||||
use validator::{ValidationErrors, ValidationErrorsKind};
|
||||
|
||||
pub fn check_validation(res: Result<(), ValidationErrors>) {
|
||||
let Err(errors) = res else {
|
||||
return;
|
||||
};
|
||||
|
||||
for (field, kind) in errors.into_errors() {
|
||||
match kind {
|
||||
ValidationErrorsKind::Struct(errors) => check_validation(Err(*errors)),
|
||||
ValidationErrorsKind::List(errors) => {
|
||||
for (i, errors) in errors {
|
||||
print!("Config `{field}[{i}]` format error: ");
|
||||
check_validation(Err(*errors));
|
||||
println!();
|
||||
}
|
||||
}
|
||||
ValidationErrorsKind::Field(error) => {
|
||||
for e in error {
|
||||
println!(
|
||||
"Config `{field}` format error: {}\n",
|
||||
e.message.unwrap_or(Cow::Borrowed("unknown error"))
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
process::exit(1);
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue