feat: Updated fields for SlackUserProfile (#325)

This commit is contained in:
Abdulla Abdurakhmanov 2025-06-20 19:15:41 +02:00 committed by GitHub
parent 6c8d495cdf
commit 309c5168cb
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 39 additions and 5 deletions

View file

@ -1,6 +1,6 @@
[package]
name = "slack-morphism"
version = "2.12.0"
version = "2.14.0"
authors = ["Abdulla Abdurakhmanov <me@abdolence.dev>"]
edition = "2021"
license = "Apache-2.0"

View file

@ -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 &section.accessory {
Some(SlackSectionBlockElement::Image(image)) => {
assert_eq!(image.alt_text, "alt text for image");

View file

@ -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::<SlackEmojiRef>(&emoji_url).unwrap();
let r = serde_json::from_str::<SlackEmojiRef>(emoji_url).unwrap();
assert_eq!(
r,
SlackEmojiRef::Url(

View file

@ -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<Utc>);
#[derive(Debug, Eq, PartialEq, Hash, Clone, Serialize, Deserialize, ValueStruct)]
pub struct SlackDate(pub String);
impl SlackDate {
pub fn to_naive_date(&self) -> Option<NaiveDate> {
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)]

View file

@ -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<SlackEnterpriseUser>,
}
#[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<SlackIcon>,
pub team: Option<SlackTeamId>,
pub start_date: Option<SlackDate>,
pub first_name: Option<String>,
pub last_name: Option<String>,
#[serde_as(as = "NoneAsEmptyString")]
pub phone: Option<PhoneNumber>,
pub pronouns: Option<String>,
pub title: Option<String>,
pub fields: Option<HashMap<SlackUserProfileFieldId, SlackUserProfileFieldValue>>,
}
#[skip_serializing_none]
@ -123,3 +134,14 @@ pub struct SlackEnterpriseUser {
pub flags: SlackUserFlags,
pub teams: Option<Vec<SlackTeamId>>,
}
#[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<String>,
}