use-event-name 0.1.0

Lightweight event name 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 EventName(String);

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

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

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

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

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

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

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

    #[test]
    fn stores_event_name_text() {
        let name = EventName::new("command.started");

        assert_eq!(name.as_str(), "command.started");
        assert_eq!(name.to_string(), "command.started");
    }

    #[test]
    fn supports_string_conversions() {
        let from_str = EventName::from("command.started");
        let from_string = EventName::from(String::from("command.finished"));

        assert_eq!(from_str.as_ref(), "command.started");
        assert_eq!(from_string.as_str(), "command.finished");
    }
}