synd_client/payload/
event.rs1use serde::Deserialize;
2use synd_feed::types::{FeedUrl, Time};
3
4#[derive(Debug, Clone, Deserialize)]
5#[serde(tag = "__typename")]
6pub enum FeedEvent {
7 TimelineChanged(TimelineChangeEvent),
8}
9
10#[derive(Debug, Clone, Deserialize)]
11#[serde(rename_all = "camelCase")]
12pub struct TimelineChangeEvent {
13 pub changed_at: Time,
14 pub affected_feeds: Option<Vec<FeedUrl>>,
15}
16
17#[cfg(test)]
18mod tests {
19 use core::assert_matches;
20
21 use super::FeedEvent;
22
23 #[test]
24 fn decodes_timeline_changed_feed_event() {
25 let event: FeedEvent = serde_json::from_value(serde_json::json!({
26 "__typename": "TimelineChanged",
27 "changedAt": "2026-06-13T00:00:00Z",
28 "affectedFeeds": ["https://example.com/feed.xml"]
29 }))
30 .unwrap();
31
32 let FeedEvent::TimelineChanged(event) = event;
33 assert_eq!(event.changed_at.to_rfc3339(), "2026-06-13T00:00:00+00:00");
34 assert_matches!(event.affected_feeds, Some(feeds) if feeds.len() == 1);
35 }
36}