summaryrefslogtreecommitdiff
path: root/rola-cli
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-06-30 06:01:32 +0800
committer魏曹先生 <1992414357@qq.com>2026-06-30 06:01:32 +0800
commit8cbba8dc8900b98e23e6ee38d6f02537ba936c1c (patch)
treec5f333d67871d25833b5ddc96f1d9aae9dcdd603 /rola-cli
parent40183e431da97fe0377b2f2e2ea47b3a14376680 (diff)
refactor(rola-cli): replace GeneralRenderer with StructuralRenderer andHEADmaster
use public modules
Diffstat (limited to 'rola-cli')
-rw-r--r--rola-cli/Cargo.toml11
-rw-r--r--rola-cli/build.rs3
-rw-r--r--rola-cli/src/bin/rola.rs7
-rw-r--r--rola-cli/src/bucket_mgr.rs7
-rw-r--r--rola-cli/src/bucket_mgr/bind.rs7
-rw-r--r--rola-cli/src/bucket_mgr/bind/chains.rs34
-rw-r--r--rola-cli/src/bucket_mgr/bind/renderers.rs2
-rw-r--r--rola-cli/src/bucket_mgr/config.rs3
-rw-r--r--rola-cli/src/bucket_mgr/creation.rs8
-rw-r--r--rola-cli/src/error.rs10
-rw-r--r--rola-cli/src/error/space.rs20
-rw-r--r--rola-cli/src/lib.rs8
-rw-r--r--rola-cli/src/output.rs3
-rw-r--r--rola-cli/src/output/setup.rs21
14 files changed, 66 insertions, 78 deletions
diff --git a/rola-cli/Cargo.toml b/rola-cli/Cargo.toml
index c9cf562..8ecc0f9 100644
--- a/rola-cli/Cargo.toml
+++ b/rola-cli/Cargo.toml
@@ -25,22 +25,25 @@ clap = { version = "4.6.1", features = ["derive"] }
[dependencies.mingling]
git = "https://github.com/mingling-rs/mingling.git"
-rev = "4be889ac2dc5263ce03bb014de24916bee2e9aa8"
+rev = "3888feded3cb83865d6161de642a1a298a7a5835"
features = [
"parser",
"extra_macros",
"dispatch_tree",
"comp",
"clap",
- "general_renderer"
+ "structural_renderer",
+ "pathf"
]
[build-dependencies.mingling]
git = "https://github.com/mingling-rs/mingling.git"
-rev = "4be889ac2dc5263ce03bb014de24916bee2e9aa8"
+rev = "3888feded3cb83865d6161de642a1a298a7a5835"
features = [
"builds",
- "comp"
+ "comp",
+ "dispatch_tree",
+ "pathf",
]
[build-dependencies]
diff --git a/rola-cli/build.rs b/rola-cli/build.rs
index a409a17..e49c689 100644
--- a/rola-cli/build.rs
+++ b/rola-cli/build.rs
@@ -1,11 +1,12 @@
use std::path::Path;
use std::process::Command;
-use mingling::build::build_comp_scripts;
+use mingling::build::{analyze_and_build_type_mapping, build_comp_scripts};
fn main() {
build_version_info();
build_completion();
+ analyze_and_build_type_mapping().unwrap();
}
fn build_version_info() {
diff --git a/rola-cli/src/bin/rola.rs b/rola-cli/src/bin/rola.rs
index 3e97468..635aa7d 100644
--- a/rola-cli/src/bin/rola.rs
+++ b/rola-cli/src/bin/rola.rs
@@ -3,11 +3,12 @@ use std::{env::current_dir, process::exit};
use mingling::{
LazyInit, Program,
macros::program_setup,
- setup::{ExitCodeSetup, GeneralRendererSetup, HelpFlagSetup, QuietFlagSetup},
+ setup::{ExitCodeSetup, HelpFlagSetup, QuietFlagSetup, StructuralRendererSetup},
};
use rola_cli::{
ThisProgram, locale,
- output::{ColorOutputSetup, EnvLoggerSetup},
+ output::setup::ColorOutputSetup,
+ output::setup::EnvLoggerSetup,
res::{bucket::ResBucketWithoutProtocol, current_dir::ResCurrentDir, overwrite::ResOverwrite},
};
@@ -39,7 +40,7 @@ fn main() {
program.with_resource(ResBucketWithoutProtocol::lazy_default());
// Setup
- program.with_setup(GeneralRendererSetup);
+ program.with_setup(StructuralRendererSetup);
program.with_setup(HelpFlagSetup::new(["-h", "--help"]));
program.with_setup(StandardOutputSetup);
program.with_setup(ExitCodeSetup::default());
diff --git a/rola-cli/src/bucket_mgr.rs b/rola-cli/src/bucket_mgr.rs
index 82a76d4..db7a6dd 100644
--- a/rola-cli/src/bucket_mgr.rs
+++ b/rola-cli/src/bucket_mgr.rs
@@ -1,4 +1,3 @@
-mod creation;
-pub use creation::*;
-mod bind;
-pub use bind::*;
+pub mod bind;
+pub mod config;
+pub mod creation;
diff --git a/rola-cli/src/bucket_mgr/bind.rs b/rola-cli/src/bucket_mgr/bind.rs
index fefebd6..a334258 100644
--- a/rola-cli/src/bucket_mgr/bind.rs
+++ b/rola-cli/src/bucket_mgr/bind.rs
@@ -5,11 +5,8 @@ use mingling::{
use rorolala::bucket::bind::BucketBind;
use serde::Serialize;
-mod chains;
-pub use chains::*;
-
-mod renderers;
-pub use renderers::*;
+pub mod chains;
+pub mod renderers;
pub const EC_BUCKET_BIND_INDEX_NOT_PROVIDED: i32 = 251;
pub const EC_BUCKET_BIND_INDEX_NOT_FOUND: i32 = 252;
diff --git a/rola-cli/src/bucket_mgr/bind/chains.rs b/rola-cli/src/bucket_mgr/bind/chains.rs
index 881e5ba..b8037e2 100644
--- a/rola-cli/src/bucket_mgr/bind/chains.rs
+++ b/rola-cli/src/bucket_mgr/bind/chains.rs
@@ -1,16 +1,20 @@
use crate::{
Next,
- bucket_mgr::{
+ bucket_mgr::bind::{
EntryBucketBind, ErrorBucketBindIndexNotFound, ErrorBucketBindIndexNotProvided,
ResultAllBucketBind, ResultBucketOperated,
ResultEnumBucketOperation::{self, Set},
ResultOneBucketBind, StateBucketBindListAll, StateBucketBindListSpecified,
StateBucketBindRemove, StateBucketBindSet,
},
- error::{ErrorRequireOverwrite, ErrorSpace},
+ error::require_overwrite::ErrorRequireOverwrite,
+ error::space::ErrorSpace,
res::{bucket::ResBucketWithoutProtocol, overwrite::ResOverwrite},
};
-use mingling::{LazyRes, macros::chain};
+use mingling::{
+ Groupped, LazyRes,
+ macros::{chain, route},
+};
use rorolala::bucket::{self};
use shared_functions::info;
@@ -55,10 +59,10 @@ pub fn handle_state_bucket_bind_set(
let (index, url) = set.inner;
let bucket_space_ref = &bucket.get_ref().space;
- let exist = match bucket::bind::check_bucket_bind_exists(bucket_space_ref, index) {
- Ok(exists) => exists,
- Err(e) => return ErrorSpace::from(e).to_chain(),
- };
+ let exist = route!(bucket::bind::check_bucket_bind_exists(
+ bucket_space_ref,
+ index
+ ));
// When the bind already exists but overwrite is not specified
// Dispatch to ErrorRequireOverwrite
@@ -88,9 +92,7 @@ pub fn handle_state_bucket_bind_remove(
let index = remove.inner;
let bucket_space_ref = &bucket.get_ref().space;
- if let Err(space_error) = bucket::bind::remove_bucket_bind(bucket_space_ref, index) {
- return ErrorSpace::from(space_error).to_chain();
- }
+ route!(bucket::bind::remove_bucket_bind(bucket_space_ref, index));
ResultBucketOperated {
operation: ResultEnumBucketOperation::Remove,
@@ -107,10 +109,9 @@ pub fn handle_state_bucket_bind_list_specified(
) -> Next {
let index = index.inner;
let bucket_space_ref = &bucket.get_ref().space;
- let bind_info = match bucket::bind::read_bucket_bind(bucket_space_ref, index) {
- Err(e) => return ErrorSpace::from(e).to_chain(),
- Ok(None) => return ErrorBucketBindIndexNotFound::new(index).to_render(),
- Ok(Some(r)) => r,
+ let bind_info = match route!(bucket::bind::read_bucket_bind(bucket_space_ref, index)) {
+ None => return ErrorBucketBindIndexNotFound::new(index).to_render(),
+ Some(r) => r,
};
ResultOneBucketBind {
@@ -127,10 +128,7 @@ pub fn handle_state_bucket_bind_list_all(
) -> Next {
let bucket_space_ref = &bucket.get_ref().space;
info!("Reading all bucket binds from space");
- let bind_list = match bucket::bind::read_bucket_binds(bucket_space_ref) {
- Err(e) => return ErrorSpace::from(e).to_chain(),
- Ok(r) => r,
- };
+ let bind_list = route!(bucket::bind::read_bucket_binds(bucket_space_ref));
info!("Read {} bucket binds", bind_list.len());
ResultAllBucketBind { bind_list }.to_render()
}
diff --git a/rola-cli/src/bucket_mgr/bind/renderers.rs b/rola-cli/src/bucket_mgr/bind/renderers.rs
index 18ae092..cf12b7f 100644
--- a/rola-cli/src/bucket_mgr/bind/renderers.rs
+++ b/rola-cli/src/bucket_mgr/bind/renderers.rs
@@ -4,7 +4,7 @@ use mingling::{
};
use crate::{
- bucket_mgr::{
+ bucket_mgr::bind::{
EC_BUCKET_BIND_INDEX_NOT_FOUND, EC_BUCKET_BIND_INDEX_NOT_PROVIDED,
ErrorBucketBindIndexNotFound, ErrorBucketBindIndexNotProvided, ResultAllBucketBind,
ResultBucketOperated, ResultEnumBucketOperation, ResultOneBucketBind,
diff --git a/rola-cli/src/bucket_mgr/config.rs b/rola-cli/src/bucket_mgr/config.rs
new file mode 100644
index 0000000..b30620b
--- /dev/null
+++ b/rola-cli/src/bucket_mgr/config.rs
@@ -0,0 +1,3 @@
+use mingling::macros::dispatcher;
+
+dispatcher!("bucket.config");
diff --git a/rola-cli/src/bucket_mgr/creation.rs b/rola-cli/src/bucket_mgr/creation.rs
index 2394228..fd794e8 100644
--- a/rola-cli/src/bucket_mgr/creation.rs
+++ b/rola-cli/src/bucket_mgr/creation.rs
@@ -10,7 +10,7 @@ use rorolala::bucket::{Bucket, NoProtocol};
use serde::Serialize;
use space_system::{Space, SpaceError, SpaceRoot, find_space_root_with};
-use crate::{Next, error::ErrorIo, locale::I18nBucketManager, res::current_dir::ResCurrentDir};
+use crate::{Next, error::io::ErrorIo, locale::I18nBucketManager, res::current_dir::ResCurrentDir};
pub const EC_BUCKET_CREATE_DIR_NOT_EMPTY: i32 = 2400;
pub const EC_BUCKET_PATH_NOT_PROVIDED: i32 = 2401;
@@ -46,7 +46,7 @@ pub fn handle_bucket_init(_args: EntryBucketInit, cwd: &mut ResCurrentDir) -> Ne
pub fn handle_bucket_create(args: EntryBucketCreate) -> Next {
let join = route! {
args.pick_or_route::<PathBuf, _>((),
- ErrorBucketPathNotProvided::new(()).to_render()
+ ErrorBucketPathNotProvided::new(())
).unpack()
};
StateBucketCreationPrecheck::new(join).to_chain()
@@ -80,9 +80,7 @@ pub fn handle_state_bucket_creation_precheck(create: StateBucketCreationPrecheck
pub fn handle_state_bucket_creation(create: StateBucketCreation) -> Next {
let path = create.inner;
- route! {
- create_dir_all(&path).map_err(|e| ErrorIo::from(e).to_render())
- };
+ route!(create_dir_all(&path).map_err(|e| ErrorIo::from(e)));
// Use a protocol-less Bucket as a temporary Space for initialization
let bucket_space = Space::<Bucket<NoProtocol>>::new(Bucket::<NoProtocol>::new_local());
diff --git a/rola-cli/src/error.rs b/rola-cli/src/error.rs
index 15bdc70..3271744 100644
--- a/rola-cli/src/error.rs
+++ b/rola-cli/src/error.rs
@@ -1,6 +1,4 @@
-mod io;
-pub use io::*;
-mod space;
-pub use space::*;
-mod require_overwrite;
-pub use require_overwrite::*;
+pub mod io;
+pub mod require_overwrite;
+pub mod space;
+ \ No newline at end of file
diff --git a/rola-cli/src/error/space.rs b/rola-cli/src/error/space.rs
index fb0a560..b4a011d 100644
--- a/rola-cli/src/error/space.rs
+++ b/rola-cli/src/error/space.rs
@@ -1,26 +1,22 @@
use mingling::{
Groupped,
- macros::{chain, r_println, renderer},
+ macros::{chain, group, r_println, renderer},
res::ResExitCode,
};
-use serde::Serialize;
use space_system::SpaceError;
-use crate::{Next, error::ErrorIo, locale::errors::I18nSpaceError};
+use crate::{Next, error::io::ErrorIo, locale::errors::I18nSpaceError};
pub const EC_SPACE_NOT_FOUND: i32 = 2600;
pub const EC_SPACE_PATH_FORMAT: i32 = 2601;
pub const EC_SPACE_REQUIRE_EMPTY_DIR: i32 = 2602;
pub const EC_SPACE_CONFIG_ALREADY_EXIST: i32 = 2603;
-#[derive(Serialize, Groupped)]
-pub struct ErrorSpace {
- pub error: SpaceError,
-}
+group!(ErrorSpace = SpaceError);
#[chain]
pub fn handle_error_space(err: ErrorSpace) -> Next {
- match err.error {
+ match err {
// Forward to ErrorIo
SpaceError::Io(error) => ErrorIo::from(error).to_render(),
@@ -30,7 +26,7 @@ pub fn handle_error_space(err: ErrorSpace) -> Next {
#[renderer]
pub fn render_error_space(err: ErrorSpace, ec: &mut ResExitCode) {
- match &err.error {
+ match &err {
SpaceError::SpaceNotFound => {
r_println!("{}", I18nSpaceError::space_not_found().trim());
ec.exit_code = EC_SPACE_NOT_FOUND;
@@ -56,9 +52,3 @@ pub fn render_error_space(err: ErrorSpace, ec: &mut ResExitCode) {
}
}
}
-
-impl From<SpaceError> for ErrorSpace {
- fn from(error: SpaceError) -> Self {
- Self { error }
- }
-}
diff --git a/rola-cli/src/lib.rs b/rola-cli/src/lib.rs
index b472169..02c479a 100644
--- a/rola-cli/src/lib.rs
+++ b/rola-cli/src/lib.rs
@@ -5,16 +5,12 @@ use mingling::{
res::ResExitCode,
};
+pub mod bucket_mgr;
+pub mod error;
pub mod output;
pub mod res;
pub mod tokio_wrapper;
-mod bucket_mgr;
-use bucket_mgr::*;
-
-mod error;
-use error::*;
-
use crate::output::display::markdown;
pub const EC_COMMAND_NOT_FOUND: i32 = 1000;
diff --git a/rola-cli/src/output.rs b/rola-cli/src/output.rs
index 65cafed..3e93bd7 100644
--- a/rola-cli/src/output.rs
+++ b/rola-cli/src/output.rs
@@ -2,5 +2,4 @@ pub mod ansi_control;
pub mod display;
pub mod env_logger;
-mod setup;
-pub use setup::*;
+pub mod setup;
diff --git a/rola-cli/src/output/setup.rs b/rola-cli/src/output/setup.rs
index 880b236..8e04eb9 100644
--- a/rola-cli/src/output/setup.rs
+++ b/rola-cli/src/output/setup.rs
@@ -39,15 +39,20 @@ pub fn env_logger_setup(program: &mut Program<ThisProgram>) {
// Add Hook
program.with_hook(
ProgramHook::<ThisProgram>::empty()
- .on_begin(|| info!("[INFO] Program is begin"))
- .on_pre_dispatch(|args| info!("[INFO] Pre dispatch: {args:?}"))
- .on_post_dispatch(|c: &_| info!("[INFO] Post dispatch: {c:?}"))
- .on_pre_chain(|c: &_, _| {
- info!("[INFO] Pre chain: {c}");
+ .on_begin::<_, ()>(|_| println!("[DEBUG] Program is begin"))
+ .on_pre_dispatch(|info| {
+ println!("[DEBUG] Pre dispatch: {}", info.arguments.join(" "))
})
- .on_post_chain(|any_output| info!("[INFO] Post chain: {}", any_output.member_id))
- .on_pre_render(|c: &_, _| info!("[INFO] Pre render: {c}"))
- .on_post_render(|_| info!("[INFO] Post render")),
+ .on_post_dispatch(|info| println!("[DEBUG] Post dispatch: {}", info.entry))
+ .on_pre_chain(|info| {
+ println!("[DEBUG] Pre chain: {}", info.input);
+ })
+ .on_post_chain(|info| println!("[DEBUG] Post chain: {}", info.output.member_id))
+ .on_finish(|_| {
+ println!("[DEBUG] Loop end");
+ })
+ .on_pre_render(|info| println!("[DEBUG] Pre render: {}", info.input))
+ .on_post_render(|_| println!("[DEBUG] Post render")),
);
}