#![doc(alias = "channel.shared_chat.update")]
use super::*;
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "typed-builder", derive(typed_builder::TypedBuilder))]
#[cfg_attr(feature = "deny_unknown_fields", serde(deny_unknown_fields))]
#[non_exhaustive]
pub struct ChannelSharedChatUpdateV1 {
#[cfg_attr(feature = "typed-builder", builder(setter(into)))]
pub broadcaster_user_id: types::UserId,
}
impl ChannelSharedChatUpdateV1 {
pub fn broadcaster_user_id(broadcaster_user_id: impl Into<types::UserId>) -> Self {
Self {
broadcaster_user_id: broadcaster_user_id.into(),
}
}
}
impl EventSubscription for ChannelSharedChatUpdateV1 {
type Payload = ChannelSharedChatUpdateV1Payload;
const EVENT_TYPE: EventType = EventType::ChannelSharedChatUpdate;
#[cfg(feature = "twitch_oauth2")]
const SCOPE: twitch_oauth2::Validator = twitch_oauth2::validator![];
const VERSION: &'static str = "1";
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "deny_unknown_fields", serde(deny_unknown_fields))]
#[non_exhaustive]
pub struct ChannelSharedChatUpdateV1Payload {
pub session_id: types::SharedChatSessionId,
pub broadcaster_user_id: types::UserId,
pub broadcaster_user_name: types::DisplayName,
pub broadcaster_user_login: types::UserName,
pub host_broadcaster_user_id: types::UserId,
pub host_broadcaster_user_name: types::DisplayName,
pub host_broadcaster_user_login: types::UserName,
pub participants: Vec<Participant>,
}
#[cfg(test)]
#[test]
fn parse_payload() {
use crate::eventsub::{Event, Message};
let payload = r##"
{
"subscription": {
"id": "5f65d0a7-0069-4f2b-944b-bc81b160ae49",
"status": "enabled",
"type": "channel.shared_chat.update",
"version": "1",
"condition": {
"broadcaster_user_id": "1971641"
},
"transport": {
"method": "websocket",
"session_id": "AgoQOtgGkFvXRlSkij343CndhIGY2VsbC1h"
},
"created_at": "2023-10-06T18:04:38.807682738Z",
"cost": 0
},
"event": {
"session_id": "2b64a92a-dbb8-424e-b1c3-304423ba1b6f",
"broadcaster_user_id": "1971641",
"broadcaster_user_login": "streamer",
"broadcaster_user_name": "streamer",
"host_broadcaster_user_id": "1971641",
"host_broadcaster_user_login": "streamer",
"host_broadcaster_user_name": "streamer",
"participants": [
{
"broadcaster_user_id": "1971641",
"broadcaster_user_name": "streamer",
"broadcaster_user_login": "streamer"
},
{
"broadcaster_user_id": "112233",
"broadcaster_user_name": "streamer33",
"broadcaster_user_login": "streamer33"
},
{
"broadcaster_user_id": "332211",
"broadcaster_user_name": "streamer11",
"broadcaster_user_login": "streamer11"
}
]
}
}
"##;
let val = Event::parse(payload).unwrap();
crate::tests::roundtrip(&val);
let Event::ChannelSharedChatUpdateV1(val) = val else {
panic!("invalid event type");
};
let Message::Notification(notif) = val.message else {
panic!("invalid message type");
};
assert_eq!(notif.broadcaster_user_id.as_str(), "1971641");
assert_eq!(notif.broadcaster_user_id, notif.host_broadcaster_user_id);
assert_eq!(
notif.broadcaster_user_login,
notif.host_broadcaster_user_login
);
assert_eq!(
notif.broadcaster_user_name,
notif.host_broadcaster_user_name
);
assert_eq!(
notif.session_id.as_str(),
"2b64a92a-dbb8-424e-b1c3-304423ba1b6f"
);
assert_eq!(notif.participants.len(), 3);
assert_eq!(
notif.participants[0].broadcaster_user_id.as_str(),
"1971641"
);
assert_eq!(notif.participants[1].broadcaster_user_id.as_str(), "112233");
assert_eq!(notif.participants[2].broadcaster_user_id.as_str(), "332211");
}