dialtone_sqlx 0.1.0

Dialtone SQLx Back-End
Documentation
use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize, Debug, PartialEq, Clone)]
#[serde(untagged)]
pub enum JobDetails {
    NoOp(NoOpJobDetails),
    SendActivityPub(SendActivityPubJobDetails),
}

/// NoOp means No Operation.
/// This is for testing purposes.
#[derive(Serialize, Deserialize, Debug, PartialEq, Clone)]
pub struct NoOpJobDetails {
    pub message: String,
}

/// Details for sending Activity Pub.
#[derive(Serialize, Deserialize, Debug, PartialEq, Clone)]
pub struct SendActivityPubJobDetails {
    pub public_key_id: String,
    pub private_key_pem: String,
    pub target_uri: String,
    pub content: String,
}

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

    #[test]
    fn roundtrip_noop_test() {
        let noop = NoOpJobDetails {
            message: "test".to_string(),
        };
        let details = JobDetails::NoOp(noop.clone());
        let serialized = serde_json::to_string(&details).unwrap();
        let deserialized = serde_json::from_str(&serialized).unwrap();
        assert_eq!(noop, deserialized);
    }

    #[test]
    fn roundtrip_send_activity_pub_test() {
        let send_activity_pub = SendActivityPubJobDetails {
            public_key_id: "blah".to_string(),
            private_key_pem: "blah".to_string(),
            target_uri: "http://foo".to_string(),
            content: "foobar".to_string(),
        };
        let details = JobDetails::SendActivityPub(send_activity_pub.clone());
        let serialized = serde_json::to_string(&details).unwrap();
        let deserialized = serde_json::from_str(&serialized).unwrap();
        assert_eq!(send_activity_pub, deserialized)
    }
}