summaryrefslogtreecommitdiff
path: root/rola-cli/src/bucket_mgr/bind/renderers.rs
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-06-19 03:11:26 +0800
committer魏曹先生 <1992414357@qq.com>2026-06-19 03:11:26 +0800
commitd36acf196f7475a91550cc64c9c9a545adb65c50 (patch)
tree282ad7138c3b479af9f99834b07ecd03151a37e8 /rola-cli/src/bucket_mgr/bind/renderers.rs
parent1e9c97c21f8a4e55420712b054895ff8b4f9a849 (diff)
refactor(bucket-mgr): extract bind chains and renderers into modules
Diffstat (limited to 'rola-cli/src/bucket_mgr/bind/renderers.rs')
-rw-r--r--rola-cli/src/bucket_mgr/bind/renderers.rs94
1 files changed, 94 insertions, 0 deletions
diff --git a/rola-cli/src/bucket_mgr/bind/renderers.rs b/rola-cli/src/bucket_mgr/bind/renderers.rs
new file mode 100644
index 0000000..18ae092
--- /dev/null
+++ b/rola-cli/src/bucket_mgr/bind/renderers.rs
@@ -0,0 +1,94 @@
+use mingling::{
+ macros::{r_println, renderer},
+ res::ResExitCode,
+};
+
+use crate::{
+ bucket_mgr::{
+ EC_BUCKET_BIND_INDEX_NOT_FOUND, EC_BUCKET_BIND_INDEX_NOT_PROVIDED,
+ ErrorBucketBindIndexNotFound, ErrorBucketBindIndexNotProvided, ResultAllBucketBind,
+ ResultBucketOperated, ResultEnumBucketOperation, ResultOneBucketBind,
+ },
+ locale::I18nBucketManager,
+ output::{ansi_control::Colorize, display::markdown},
+};
+
+// Result Renderers
+
+fn format_bind(idx: u8) -> String {
+ format!("BIND_{:03}", idx).bold().white().to_string()
+}
+
+fn format_bind_to(idx: u8, url: impl AsRef<str>) -> String {
+ format!(
+ "{} {} {}",
+ // BIND
+ format_bind(idx),
+ // -->
+ "-->".bright_yellow(),
+ // DIR
+ format!("\"{}\"", url.as_ref()).bold().cyan()
+ )
+}
+
+#[renderer]
+pub fn render_result_one_bucket_bind(result: ResultOneBucketBind) {
+ r_println!("{}", format_bind_to(result.index, result.url.trim()));
+}
+
+#[renderer]
+pub fn render_result_all_bucket_bind(result: ResultAllBucketBind) {
+ let list: Vec<String> = result
+ .bind_list
+ .iter()
+ .map(|b| format_bind_to(b.get_index(), b.get_url().trim()))
+ .collect();
+ for item in list {
+ r_println!("{}", item);
+ }
+}
+
+#[renderer]
+pub fn render_result_bucket_operated(result: ResultBucketOperated) {
+ let index = result.index;
+ let url = result.url.unwrap_or("".to_string());
+ match result.operation {
+ ResultEnumBucketOperation::Set => {
+ r_println!(
+ " {} {}",
+ "+++".bold().bright_green(),
+ format_bind_to(index, url.trim())
+ )
+ }
+ ResultEnumBucketOperation::Remove => {
+ r_println!(" {} {}", "---".bold().bright_red(), format_bind(index))
+ }
+ _ => {}
+ }
+}
+
+// Error Renderers
+
+#[renderer]
+pub fn render_error_bucket_bind_index_not_provided(
+ _err: ErrorBucketBindIndexNotProvided,
+ ec: &mut ResExitCode,
+) {
+ r_println!(
+ "{}",
+ markdown(I18nBucketManager::error_bind_index_not_provided().trim())
+ );
+ ec.exit_code = EC_BUCKET_BIND_INDEX_NOT_PROVIDED;
+}
+
+#[renderer]
+pub fn render_error_bucket_bind_index_not_found(
+ err: ErrorBucketBindIndexNotFound,
+ ec: &mut ResExitCode,
+) {
+ r_println!(
+ "{}",
+ markdown(I18nBucketManager::error_bind_index_not_found(err.info.to_string()).trim())
+ );
+ ec.exit_code = EC_BUCKET_BIND_INDEX_NOT_FOUND;
+}