11use crate :: * ;
2+ use std:: collections:: HashMap ;
23
34use crate :: SlackUserId ;
45use rsb_derive:: Builder ;
56use rvstruct:: * ;
67use serde:: { Deserialize , Serialize } ;
7- use serde_with:: { serde_as, skip_serializing_none, DisplayFromStr } ;
8+ use serde_with:: { serde_as, skip_serializing_none, DisplayFromStr , NoneAsEmptyString } ;
89
910#[ skip_serializing_none]
1011#[ derive( Debug , PartialEq , Clone , Serialize , Deserialize , Builder ) ]
@@ -26,6 +27,7 @@ pub struct SlackUser {
2627 pub enterprise_user : Option < SlackEnterpriseUser > ,
2728}
2829
30+ #[ serde_as]
2931#[ skip_serializing_none]
3032#[ derive( Debug , PartialEq , Clone , Serialize , Deserialize , Builder ) ]
3133pub struct SlackUserProfile {
@@ -42,6 +44,15 @@ pub struct SlackUserProfile {
4244 #[ serde( flatten) ]
4345 pub icon : Option < SlackIcon > ,
4446 pub team : Option < SlackTeamId > ,
47+ pub start_date : Option < SlackDate > ,
48+ pub first_name : Option < String > ,
49+ pub last_name : Option < String > ,
50+ #[ serde_as( as = "NoneAsEmptyString" ) ]
51+ pub phone : Option < PhoneNumber > ,
52+ pub pronouns : Option < String > ,
53+ pub title : Option < String > ,
54+
55+ pub fields : Option < HashMap < SlackUserProfileFieldId , SlackUserProfileFieldValue > > ,
4556}
4657
4758#[ skip_serializing_none]
@@ -123,3 +134,14 @@ pub struct SlackEnterpriseUser {
123134 pub flags : SlackUserFlags ,
124135 pub teams : Option < Vec < SlackTeamId > > ,
125136}
137+
138+ #[ derive( Debug , Eq , PartialEq , Hash , Clone , Serialize , Deserialize , ValueStruct ) ]
139+ pub struct SlackUserProfileFieldId ( pub String ) ;
140+
141+ #[ serde_as]
142+ #[ derive( Debug , Eq , PartialEq , Clone , Serialize , Deserialize ) ]
143+ pub struct SlackUserProfileFieldValue {
144+ pub value : String ,
145+ #[ serde_as( as = "NoneAsEmptyString" ) ]
146+ pub alt : Option < String > ,
147+ }
0 commit comments