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,