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