s3s 0.13.0

S3 Service Adapter
Documentation
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Event(String);

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

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

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

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

    #[test]
    fn from_string() {
        let event = Event::from("s3:ObjectCreated:Put".to_owned());
        assert_eq!(event.as_ref(), "s3:ObjectCreated:Put");
    }

    #[test]
    fn into_string() {
        let event = Event::from("s3:ObjectRemoved:Delete".to_owned());
        let s: String = event.into();
        assert_eq!(s, "s3:ObjectRemoved:Delete");
    }

    #[test]
    fn as_ref_str() {
        let event = Event::from(String::new());
        let s: &str = event.as_ref();
        assert_eq!(s, "");
    }

    #[test]
    fn debug_impl() {
        let event = Event::from("test".to_owned());
        let debug = format!("{event:?}");
        assert!(debug.contains("test"));
    }

    #[test]
    fn clone_and_eq() {
        let event = Event::from("ev".to_owned());
        let cloned = event.clone();
        assert_eq!(event, cloned);
    }

    #[test]
    fn serde_roundtrip() {
        let event = Event::from("s3:ObjectCreated:*".to_owned());
        let json = serde_json::to_string(&event).unwrap();
        let deserialized: Event = serde_json::from_str(&json).unwrap();
        assert_eq!(event, deserialized);
    }
}