megalodon 1.3.0

Fediverse API client library for Rust.
Documentation
use super::{Account, Status};
use crate::entities as MegalodonEntities;
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};

#[derive(Debug, Deserialize, Clone)]
pub struct Notification {
    account: Account,
    created_at: DateTime<Utc>,
    id: String,
    status: Option<Status>,
    r#type: NotificationType,
}

// https://docs.joinmastodon.org/entities/Notification/#type
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "snake_case")]
pub enum NotificationType {
    Follow,
    FollowRequest,
    Mention,
    Reblog,
    Favourite,
    Poll,
    Status,
    Update,
    #[serde(rename = "admin.sign_up")]
    AdminSignup,
    #[serde(rename = "admin.report")]
    AdminReport,
    Quote,
    QuotedUpdate,
}

impl From<NotificationType> for MegalodonEntities::notification::NotificationType {
    fn from(val: NotificationType) -> Self {
        match val {
            NotificationType::Follow => MegalodonEntities::notification::NotificationType::Follow,
            NotificationType::FollowRequest => {
                MegalodonEntities::notification::NotificationType::FollowRequest
            }
            NotificationType::Mention => MegalodonEntities::notification::NotificationType::Mention,
            NotificationType::Reblog => MegalodonEntities::notification::NotificationType::Reblog,
            NotificationType::Favourite => {
                MegalodonEntities::notification::NotificationType::Favourite
            }
            NotificationType::Poll => {
                MegalodonEntities::notification::NotificationType::PollExpired
            }
            NotificationType::Status => MegalodonEntities::notification::NotificationType::Status,
            NotificationType::Update => MegalodonEntities::notification::NotificationType::Update,
            NotificationType::AdminSignup => {
                MegalodonEntities::notification::NotificationType::AdminSignup
            }
            NotificationType::AdminReport => {
                MegalodonEntities::notification::NotificationType::AdminReport
            }
            NotificationType::Quote => MegalodonEntities::notification::NotificationType::Quote,
            NotificationType::QuotedUpdate => {
                MegalodonEntities::notification::NotificationType::QuotedUpdate
            }
        }
    }
}

impl From<Notification> for MegalodonEntities::Notification {
    fn from(val: Notification) -> Self {
        MegalodonEntities::Notification {
            account: Some(val.account.into()),
            created_at: val.created_at,
            id: val.id,
            status: val.status.map(|i| i.into()),
            reaction: None,
            target: None,
            r#type: val.r#type.into(),
        }
    }
}