///|
/// A Discord developer team and its members.
pub(all) struct Team {
icon : Nullable[ImageHash]
id : TeamId
members : Array[TeamMember]
name : String
owner_user_id : UserId
} derive(ToJson, FromJson, Debug)
///|
/// A user's membership record within a developer team.
pub(all) struct TeamMember {
membership_state : TeamMembershipState
team_id : TeamId
user : User
role : String?
} derive(ToJson, FromJson, Debug)
///|
/// A user's invitation state within a developer team.
pub(all) enum TeamMembershipState {
Invited
Accepted
Unknown(Int)
} derive(Eq, Debug)
///|
pub fn TeamMembershipState::to_int(self : TeamMembershipState) -> Int {
match self {
Invited => 1
Accepted => 2
Unknown(value) => value
}
}
///|
pub fn TeamMembershipState::from_int(value : Int) -> TeamMembershipState {
match value {
1 => Invited
2 => Accepted
value => Unknown(value)
}
}
///|
pub impl ToJson for TeamMembershipState with fn to_json(self) {
Json::number(self.to_int().to_double())
}
///|
pub impl @json.FromJson for TeamMembershipState with fn from_json(json, path) {
match json {
Number(value, ..) => TeamMembershipState::from_int(value.to_int())
_ =>
raise JsonDecodeError(
(
path, "expected a user's invitation state within a developer team (number)",
),
)
}
}