@smbcloud / cli / commits / 53ded5a

Fix mail app id data type parsing

setoelkahfi committed Aug 15, 2026 at 09:42 UTC 53ded5a73abc5687dbd290491fbf792bd2ea562b
2 files changed +18 -13
crates/cli/src/cloud-mail/render.rs
+8 -8
@@ -41,7 +41,7 @@ pub(crate) fn print_mail_apps(mail_apps: &[MailApp]) {
41
42 for mail_app in mail_apps {
43 println!(
44 - "#{} {} ({}) [{}] project={} inboxes={}",
44 + "{} {} ({}) [{}] project={} inboxes={}",
45 mail_app.id,
46 style(&mail_app.name).bold(),
47 mail_app.domain,
@@ -54,7 +54,7 @@ pub(crate) fn print_mail_apps(mail_apps: &[MailApp]) {
54
55 pub(crate) fn print_mail_app_detail(mail_app: &MailApp) {
56 print_heading("Mail app");
57 - print_field("ID", mail_app.id.to_string());
57 + print_field("ID", &mail_app.id);
58 print_field("Name", &mail_app.name);
59 print_field("Domain", &mail_app.domain);
60 print_field("Status", mail_app.status.to_string());
@@ -76,7 +76,7 @@ pub(crate) fn print_mail_app_detail(mail_app: &MailApp) {
76
77 for inbox in &mail_app.inboxes {
78 println!(
79 - "#{} {} -> {} [{}]",
79 + "{} {} -> {} [{}]",
80 inbox.id,
81 style(&inbox.full_address).bold(),
82 inbox.forward_to_email,
@@ -87,8 +87,8 @@ pub(crate) fn print_mail_app_detail(mail_app: &MailApp) {
87
88 pub(crate) fn print_mail_inbox_detail(mail_inbox: &MailInbox) {
89 print_heading("Mail inbox");
90 - print_field("ID", mail_inbox.id.to_string());
91 - print_field("Mail app ID", mail_inbox.mail_app_id.to_string());
90 + print_field("ID", &mail_inbox.id);
91 + print_field("Mail app ID", &mail_inbox.mail_app_id);
92 print_field("Project ID", mail_inbox.project_id.to_string());
93 print_field("Tenant ID", mail_inbox.tenant_id.to_string());
94 print_field("Local part", &mail_inbox.local_part);
@@ -139,7 +139,7 @@ pub(crate) fn print_mail_messages(messages: &[MailMessage]) {
139
140 for message in messages {
141 println!(
142 - "#{} {} from {} [{}]",
142 + "{} {} from {} [{}]",
143 message.id,
144 message
145 .subject
@@ -156,8 +156,8 @@ pub(crate) fn print_mail_messages(messages: &[MailMessage]) {
156
157 pub(crate) fn print_mail_message_detail(message: &MailMessage) {
158 print_heading("Mail message");
159 - print_field("ID", message.id.to_string());
160 - print_field("Inbox ID", message.mail_inbox_id.to_string());
159 + print_field("ID", &message.id);
160 + print_field("Inbox ID", &message.mail_inbox_id);
161 print_field("Status", message.status.to_string());
162 print_field("Provider message ID", &message.provider_message_id);
163 print_field("Original recipient", &message.original_recipient_email);
crates/smbcloud-model/src/mail.rs
+10 -5
@@ -45,7 +45,12 @@ impl Display for MailMessageStatus {
45
46 #[derive(Deserialize, Serialize, Debug, Clone)]
47 pub struct MailApp {
48 - pub id: i32,
48 + // UUIDs, not sequence numbers. The API moved mail_apps, mail_inboxes and
49 + // mail_messages onto UUID primary keys; leaving these as i32 made every
50 + // `smb mail *` command and every mail MCP tool fail to deserialize with
51 + // "invalid type: string ..., expected i32". tenant_id and project_id are
52 + // still integers.
53 + pub id: String,
54 pub name: String,
55 pub domain: String,
56 pub aws_region: String,
@@ -65,13 +70,13 @@ pub struct MailApp {
70
71 #[derive(Deserialize, Serialize, Debug, Clone)]
72 pub struct MailInbox {
68 - pub id: i32,
73 + pub id: String,
74 pub local_part: String,
75 pub full_address: String,
76 pub inbox_email: String,
77 pub sender_email: String,
78 pub forward_to_email: String,
74 - pub mail_app_id: i32,
79 + pub mail_app_id: String,
80 pub project_id: i32,
81 pub tenant_id: i32,
82 pub last_test_email_sent_at: Option<DateTime<Utc>>,
@@ -85,8 +90,8 @@ pub struct MailInbox {
90
91 #[derive(Deserialize, Serialize, Debug, Clone)]
92 pub struct MailMessage {
88 - pub id: i32,
89 - pub mail_inbox_id: i32,
93 + pub id: String,
94 + pub mail_inbox_id: String,
95 pub provider_message_id: String,
96 pub original_recipient_email: String,
97 pub from_email: String,