use mingling::{ Groupped, macros::{dispatcher_clap, pack, pack_err}, }; use rorolala::bucket::bind::BucketBind; use serde::Serialize; mod chains; pub use chains::*; mod renderers; pub use renderers::*; pub const EC_BUCKET_BIND_INDEX_NOT_PROVIDED: i32 = 251; pub const EC_BUCKET_BIND_INDEX_NOT_FOUND: i32 = 252; #[derive(Default, clap::Parser, Serialize, Groupped)] #[dispatcher_clap("bucket.bind", CMDBucketBind)] pub struct EntryBucketBind { index: Option, #[arg(long, conflicts_with_all = ["set"])] remove: bool, #[arg(long, conflicts_with_all = ["remove"])] set: Option, } pack!(StateBucketBindListAll = ()); pack!(StateBucketBindListSpecified = u8); pack!(StateBucketBindRemove = u8); pack!(StateBucketBindSet = (u8, String)); // idx, url #[derive(Default, Serialize, Groupped)] pub struct ResultAllBucketBind { bind_list: Vec, } #[derive(Default, Serialize, Groupped)] pub struct ResultOneBucketBind { index: u8, url: String, } #[derive(Default, Serialize, Groupped)] pub struct ResultBucketOperated { pub operation: ResultEnumBucketOperation, pub index: u8, pub url: Option, } #[derive(Default, Serialize)] pub enum ResultEnumBucketOperation { #[serde(rename = "none")] #[default] None, #[serde(rename = "set_bind")] Set, #[serde(rename = "remove_bind")] Remove, } pack_err!(ErrorBucketBindIndexNotProvided); pack_err!(ErrorBucketBindIndexNotFound = u8);