From 309c5168cb0e45841be3dd5813019cd560d8e357 Mon Sep 17 00:00:00 2001 From: Abdulla Abdurakhmanov Date: Fri, 20 Jun 2025 19:15:41 +0200 Subject: [PATCH] feat: Updated fields for SlackUserProfile (#325) --- Cargo.toml | 2 +- src/models/blocks/kit.rs | 2 +- src/models/common/emoji.rs | 2 +- src/models/common/mod.rs | 14 +++++++++++++- src/models/common/user.rs | 24 +++++++++++++++++++++++- 5 files changed, 39 insertions(+), 5 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index d151d0d..ac811c2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "slack-morphism" -version = "2.12.0" +version = "2.14.0" authors = ["Abdulla Abdurakhmanov "] edition = "2021" license = "Apache-2.0" diff --git a/src/models/blocks/kit.rs b/src/models/blocks/kit.rs index 8d29b6f..186ab10 100644 --- a/src/models/blocks/kit.rs +++ b/src/models/blocks/kit.rs @@ -1094,7 +1094,7 @@ mod test { let payload = include_str!("./fixtures/slack_image_blocks.json"); let content: SlackMessageContent = serde_json::from_str(payload)?; let blocks = content.blocks.expect("Blocks should not be empty"); - match blocks.get(0) { + match blocks.first() { Some(SlackBlock::Section(section)) => match §ion.accessory { Some(SlackSectionBlockElement::Image(image)) => { assert_eq!(image.alt_text, "alt text for image"); diff --git a/src/models/common/emoji.rs b/src/models/common/emoji.rs index bcf6b74..624eb30 100644 --- a/src/models/common/emoji.rs +++ b/src/models/common/emoji.rs @@ -118,7 +118,7 @@ mod test { fn test_deserialize_emoji_url_with_escaped_slashes() { let emoji_url = r#""https:\/\/emoji.slack-edge.com\/test_emoji.png""#; - let r = serde_json::from_str::(&emoji_url).unwrap(); + let r = serde_json::from_str::(emoji_url).unwrap(); assert_eq!( r, SlackEmojiRef::Url( diff --git a/src/models/common/mod.rs b/src/models/common/mod.rs index 027280a..983146d 100644 --- a/src/models/common/mod.rs +++ b/src/models/common/mod.rs @@ -1,5 +1,5 @@ use chrono::serde::ts_seconds; -use chrono::{DateTime, TimeZone, Utc}; +use chrono::{DateTime, NaiveDate, TimeZone, Utc}; use rsb_derive::Builder; use rvstruct::ValueStruct; use serde::{Deserialize, Serialize}; @@ -124,6 +124,15 @@ pub struct SlackBotId(pub String); #[derive(Debug, Eq, PartialEq, Hash, Clone, Serialize, Deserialize, ValueStruct)] pub struct SlackDateTime(#[serde(with = "ts_seconds")] pub DateTime); +#[derive(Debug, Eq, PartialEq, Hash, Clone, Serialize, Deserialize, ValueStruct)] +pub struct SlackDate(pub String); + +impl SlackDate { + pub fn to_naive_date(&self) -> Option { + NaiveDate::parse_from_str(self.value(), "%Y-%m-%d").ok() + } +} + #[derive(Debug, Eq, PartialEq, Hash, Clone, Serialize, Deserialize, ValueStruct)] pub struct SlackLocale(pub String); @@ -181,6 +190,9 @@ impl fmt::Debug for SlackSigningSecret { #[derive(Debug, Eq, PartialEq, Hash, Clone, Serialize, Deserialize, ValueStruct)] pub struct EmailAddress(pub String); +#[derive(Debug, Eq, PartialEq, Hash, Clone, Serialize, Deserialize, ValueStruct)] +pub struct PhoneNumber(pub String); + #[serde_as] #[skip_serializing_none] #[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)] diff --git a/src/models/common/user.rs b/src/models/common/user.rs index d6ba330..eb84143 100644 --- a/src/models/common/user.rs +++ b/src/models/common/user.rs @@ -1,10 +1,11 @@ use crate::*; +use std::collections::HashMap; use crate::SlackUserId; use rsb_derive::Builder; use rvstruct::*; use serde::{Deserialize, Serialize}; -use serde_with::{serde_as, skip_serializing_none, DisplayFromStr}; +use serde_with::{serde_as, skip_serializing_none, DisplayFromStr, NoneAsEmptyString}; #[skip_serializing_none] #[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)] @@ -26,6 +27,7 @@ pub struct SlackUser { pub enterprise_user: Option, } +#[serde_as] #[skip_serializing_none] #[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)] pub struct SlackUserProfile { @@ -42,6 +44,15 @@ pub struct SlackUserProfile { #[serde(flatten)] pub icon: Option, pub team: Option, + pub start_date: Option, + pub first_name: Option, + pub last_name: Option, + #[serde_as(as = "NoneAsEmptyString")] + pub phone: Option, + pub pronouns: Option, + pub title: Option, + + pub fields: Option>, } #[skip_serializing_none] @@ -123,3 +134,14 @@ pub struct SlackEnterpriseUser { pub flags: SlackUserFlags, pub teams: Option>, } + +#[derive(Debug, Eq, PartialEq, Hash, Clone, Serialize, Deserialize, ValueStruct)] +pub struct SlackUserProfileFieldId(pub String); + +#[serde_as] +#[derive(Debug, Eq, PartialEq, Clone, Serialize, Deserialize)] +pub struct SlackUserProfileFieldValue { + pub value: String, + #[serde_as(as = "NoneAsEmptyString")] + pub alt: Option, +}