use clap::{Args, Subcommand};
use serde::{Deserialize, Serialize};
use crate::entity::role::UserGroupRole;
use super::{parse_key_val_colon, AttachmentsArgs};
#[derive(Serialize, Debug, Deserialize, Args, derive_more::From, Clone)]
pub struct GroupsArgs {
#[command(subcommand)]
pub command: GroupsCommands,
}
#[derive(Subcommand, Serialize, Debug, Deserialize, derive_more::From, Clone)]
pub enum GroupsCommands {
Create(GroupCreateArgs),
Get(GroupGetArgs),
UpdateUser(GroupUpdateUserArgs),
RemoveUser(RemoveUserGroupArgs),
Attachments(AttachmentsArgs),
}
#[derive(Serialize, Debug, Deserialize, Args, Clone)]
pub struct GroupCreateArgs {
pub group: String,
}
#[derive(Serialize, Debug, Deserialize, Args, Clone)]
pub struct GroupGetArgs {
pub group: String,
}
#[derive(Serialize, Debug, Deserialize, Args, Clone)]
pub struct GroupUpdateUserArgs {
pub group: String,
#[arg(num_args = 0.., value_parser = parse_key_val_colon::<String, UserGroupRole>)]
pub roles: Vec<(String, UserGroupRole)>,
}
#[derive(Serialize, Debug, Deserialize, Args, Clone)]
pub struct RemoveUserGroupArgs {
pub group: String,
#[arg(num_args = 0..)]
pub users: Vec<String>,
}