use-event-source 0.1.0

Lightweight event source primitive for RustUse.
Documentation
#![forbid(unsafe_code)]
#![doc = include_str!("../README.md")]

use core::fmt;

#[derive(Clone, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)]
pub struct EventSource(String);

impl EventSource {
    pub fn new(value: impl Into<String>) -> Self {
        Self(value.into())
    }

    pub fn as_str(&self) -> &str {
        &self.0
    }
}

impl AsRef<str> for EventSource {
    fn as_ref(&self) -> &str {
        self.as_str()
    }
}

impl From<&str> for EventSource {
    fn from(value: &str) -> Self {
        Self::new(value)
    }
}

impl From<String> for EventSource {
    fn from(value: String) -> Self {
        Self(value)
    }
}

impl fmt::Display for EventSource {
    fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
        formatter.write_str(self.as_str())
    }
}

#[cfg(test)]
mod tests {
    use super::EventSource;

    #[test]
    fn stores_event_source_text() {
        let source = EventSource::new("cli");

        assert_eq!(source.as_str(), "cli");
        assert_eq!(source.to_string(), "cli");
    }

    #[test]
    fn supports_string_conversions() {
        let from_str = EventSource::from("cli");
        let from_string = EventSource::from(String::from("worker"));

        assert_eq!(from_str.as_ref(), "cli");
        assert_eq!(from_string.as_str(), "worker");
    }
}