Skip to main content

feedparser_rs/types/
version.rs

1use std::fmt;
2
3/// Feed format version
4#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
5pub enum FeedVersion {
6    /// RSS 0.90
7    Rss090,
8    /// RSS 0.91 Netscape (with Netscape DOCTYPE)
9    Rss091Netscape,
10    /// RSS 0.91 Userland (without Netscape DOCTYPE)
11    Rss091Userland,
12    /// RSS 0.92
13    Rss092,
14    /// RSS 1.0 (RDF)
15    Rss10,
16    /// RSS 2.0
17    Rss20,
18    /// Atom 0.3
19    Atom03,
20    /// Atom 1.0
21    Atom10,
22    /// JSON Feed 1.0
23    JsonFeed10,
24    /// JSON Feed 1.1
25    JsonFeed11,
26    /// Unknown format
27    #[default]
28    Unknown,
29}
30
31impl FeedVersion {
32    /// Returns feedparser-compatible version string
33    ///
34    /// # Examples
35    ///
36    /// ```
37    /// use feedparser_rs::FeedVersion;
38    ///
39    /// assert_eq!(FeedVersion::Rss20.as_str(), "rss20");
40    /// assert_eq!(FeedVersion::Atom10.as_str(), "atom10");
41    /// ```
42    #[must_use]
43    pub const fn as_str(&self) -> &'static str {
44        match self {
45            Self::Rss090 => "rss090",
46            Self::Rss091Netscape => "rss091n",
47            Self::Rss091Userland => "rss091u",
48            Self::Rss092 => "rss092",
49            Self::Rss10 => "rss10",
50            Self::Rss20 => "rss20",
51            Self::Atom03 => "atom03",
52            Self::Atom10 => "atom10",
53            Self::JsonFeed10 => "json10",
54            Self::JsonFeed11 => "json11",
55            Self::Unknown => "",
56        }
57    }
58}
59
60impl fmt::Display for FeedVersion {
61    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
62        write!(f, "{}", self.as_str())
63    }
64}
65
66#[cfg(test)]
67mod tests {
68    use super::*;
69
70    #[test]
71    fn test_version_as_str() {
72        assert_eq!(FeedVersion::Rss20.as_str(), "rss20");
73        assert_eq!(FeedVersion::Atom10.as_str(), "atom10");
74        assert_eq!(FeedVersion::Unknown.as_str(), "");
75    }
76
77    #[test]
78    fn test_version_display() {
79        assert_eq!(format!("{}", FeedVersion::Rss20), "rss20");
80        assert_eq!(format!("{}", FeedVersion::Atom10), "atom10");
81    }
82
83    #[test]
84    fn test_version_default() {
85        let v: FeedVersion = FeedVersion::default();
86        assert_eq!(v, FeedVersion::Unknown);
87    }
88}