diff --git a/src/requests.rs b/src/requests.rs index 0387295..8242550 100644 --- a/src/requests.rs +++ b/src/requests.rs @@ -14,6 +14,7 @@ use crate::{ RegionListResponse, EmailUsageResponse, EmailDomainListResponse, + EmailUserListResponse, MonitorCheckListResponse, MonitorCheckTypesResponse, MonitorContactListResponse, @@ -54,12 +55,18 @@ pub enum ZoneSubArgs { pub enum EmailDomainSubArgs { List(EmailDomainListRequest), } +#[derive(Serialize, Deserialize, Debug, clap::Subcommand)] +pub enum EmailUserSubArgs { + List(EmailUserListRequest), +} #[derive(Serialize, Deserialize, Debug, clap::Subcommand)] pub enum EmailSubArgs { #[clap(subcommand)] Domain(EmailDomainSubArgs), Usage(EmailUsageRequest), + #[clap(subcommand)] + User(EmailUserSubArgs), } #[derive(Serialize, Deserialize, Debug, clap::Subcommand)] @@ -212,6 +219,7 @@ impl Args { Self::Region(RegionSubArgs::List(reg_list)) => print_req(reg_list)?, Self::Email(EmailSubArgs::Usage(email_usage)) => print_req(email_usage)?, Self::Email(EmailSubArgs::Domain(EmailDomainSubArgs::List(email_domain_list))) => print_req(email_domain_list)?, + Self::Email(EmailSubArgs::User(EmailUserSubArgs::List(email_user_list))) => print_req(email_user_list)?, } Ok(()) } @@ -278,3 +286,8 @@ pub struct MonitorCheckTypesRequest {} #[lunanode_request(response="MonitorContactListResponse", endpoint="monitor/contact-list/")] pub struct MonitorContactListRequest {} + +#[lunanode_request(response="EmailUserListResponse", endpoint="email/user-list/")] +pub struct EmailUserListRequest { + domain_id: i32, +} diff --git a/src/responses.rs b/src/responses.rs index 451c33f..d9fcd32 100644 --- a/src/responses.rs +++ b/src/responses.rs @@ -583,3 +583,24 @@ pub struct MonitorContactListResponse { /// A list of contacts in your LunaNode account. This should be deserialized as Option>, but I haven't gotten around to serializing this in that way. TODO. contacts: Contacts, } + +#[serde_as] +#[derive(Serialize, Deserialize, Debug)] +pub struct EmailUser { + /// The user's ID. + #[serde_as(as="DisplayFromStr")] + id: i32, + /// The user's email. This may be more strict in the future. + email: String, + #[serde_as(as="DisplayFromStr")] + /// The user's storage usage in MB. + storage: i32, + /// The user's storage usage, with an "MB" or "GB" designation afterwards. + storage_nice: String, +} + +#[lunanode_response] +pub struct EmailUserListResponse { + #[serde(flatten)] + users: std::collections::HashMap, +}