enigmatick 0.4.1

Enigmatick is a social media platform that integrates with servers that implement the ActivityPub protocol (e.g., Mastodon)
Documentation
use crate::db::runner::DbRunner;
use crate::schema::unprocessable;
use chrono::{DateTime, Utc};
use diesel::prelude::*;
use diesel::{AsChangeset, Identifiable, Queryable};
use serde::{Deserialize, Serialize};
use serde_json::Value;

#[derive(Serialize, Deserialize, Insertable, Default, Debug, Clone)]
#[diesel(table_name = unprocessable)]
pub struct NewUnprocessable {
    pub raw: Value,
    pub error: Option<String>,
}

impl From<Value> for NewUnprocessable {
    fn from(value: Value) -> Self {
        NewUnprocessable {
            raw: value,
            error: None,
        }
    }
}

pub type UnprocessableFields = (Value, Option<String>);
impl From<UnprocessableFields> for NewUnprocessable {
    fn from((raw, error): UnprocessableFields) -> Self {
        NewUnprocessable { raw, error }
    }
}

#[derive(Identifiable, Queryable, AsChangeset, Serialize, Clone, Default, Debug)]
#[diesel(table_name = unprocessable)]
pub struct Unprocessable {
    #[serde(skip_serializing)]
    pub id: i32,
    pub created_at: DateTime<Utc>,
    pub updated_at: DateTime<Utc>,
    pub raw: Value,
    pub error: Option<String>,
}

pub async fn create_unprocessable<C: DbRunner>(
    conn: &C,
    unprocessable: NewUnprocessable,
) -> Option<Unprocessable> {
    conn.run(move |c| {
        diesel::insert_into(unprocessable::table)
            .values(&unprocessable)
            .get_result::<Unprocessable>(c)
    })
    .await
    .ok()
}