Skip to content

Commit

Permalink
skip serializing none
Browse files Browse the repository at this point in the history
  • Loading branch information
aumetra committed Jul 31, 2024
1 parent 6aeb213 commit 7dea8fd
Show file tree
Hide file tree
Showing 6 changed files with 76 additions and 17 deletions.
33 changes: 22 additions & 11 deletions crates/kitsune-type/src/ap/actor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use super::object::MediaAttachment;
use crate::jsonld::{self, RdfNode};
use iso8601_timestamp::Timestamp;
use serde::{Deserialize, Serialize};
use serde_with::serde_as;
use serde_with::{serde_as, skip_serializing_none};
use sonic_rs::Value;

#[derive(Clone, Copy, Debug, Deserialize, Serialize)]
Expand All @@ -25,50 +25,58 @@ impl ActorType {
}

#[serde_as]
#[skip_serializing_none]
#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct Actor {
#[serde(default, rename = "@context")]
pub context: Value,

pub id: String,

#[serde_as(as = "jsonld::serde::FirstOk")]
pub r#type: ActorType,
#[serde(default)]

#[serde_as(as = "Option<jsonld::serde::First>")]
pub name: Option<String>,

#[serde_as(as = "jsonld::serde::First")]
pub preferred_username: String,
#[serde(default)]

#[serde_as(as = "Option<jsonld::serde::First>")]
pub subject: Option<String>,
#[serde(default)]

#[serde_as(as = "Option<jsonld::serde::First>")]
pub icon: Option<MediaAttachment>,
#[serde(default)]

#[serde_as(as = "Option<jsonld::serde::First>")]
pub image: Option<MediaAttachment>,

#[serde(default)]
#[serde_as(as = "jsonld::serde::First")]
pub manually_approves_followers: bool,

#[serde_as(as = "jsonld::serde::First")]
pub public_key: PublicKey,
#[serde(default)]

#[serde_as(as = "Option<jsonld::serde::First>")]
pub endpoints: Option<Endpoints>,
#[serde(default)]

#[serde_as(as = "Option<jsonld::serde::First<jsonld::serde::Id>>")]
pub featured: Option<String>,

#[serde_as(as = "jsonld::serde::First")]
pub inbox: String,
#[serde(default)]

#[serde_as(as = "Option<jsonld::serde::First<jsonld::serde::Id>>")]
pub outbox: Option<String>,
#[serde(default)]

#[serde_as(as = "Option<jsonld::serde::First<jsonld::serde::Id>>")]
pub followers: Option<String>,
#[serde(default)]

#[serde_as(as = "Option<jsonld::serde::First<jsonld::serde::Id>>")]
pub following: Option<String>,

#[serde(default = "Timestamp::now_utc")]
pub published: Timestamp,
}
Expand All @@ -80,21 +88,24 @@ impl RdfNode for Actor {
}

#[serde_as]
#[skip_serializing_none]
#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct Endpoints {
#[serde(default)]
#[serde_as(as = "Option<jsonld::serde::First<jsonld::serde::Id>>")]
pub shared_inbox: Option<String>,
}

#[serde_as]
#[skip_serializing_none]
#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct PublicKey {
pub id: String,

#[serde_as(as = "jsonld::serde::First<jsonld::serde::Id>")]
pub owner: String,

#[serde_as(as = "jsonld::serde::First")]
pub public_key_pem: String,
}
15 changes: 14 additions & 1 deletion crates/kitsune-type/src/ap/collection.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use crate::jsonld;
use serde::{Deserialize, Serialize};
use serde_with::serde_as;
use serde_with::{serde_as, skip_serializing_none};
use sonic_rs::Value;

#[derive(Clone, Debug, Deserialize, Serialize)]
Expand All @@ -9,16 +9,22 @@ pub enum CollectionType {
}

#[serde_as]
#[skip_serializing_none]
#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct Collection {
#[serde(default, rename = "@context")]
pub context: Value,

pub id: String,

#[serde_as(as = "jsonld::serde::FirstOk")]
pub r#type: CollectionType,

pub total_items: u64,

pub first: Option<String>,

pub last: Option<String>,
}

Expand All @@ -28,16 +34,23 @@ pub enum PageType {
}

#[serde_as]
#[skip_serializing_none]
#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct CollectionPage<T> {
#[serde(default, rename = "@context")]
pub context: Value,

pub id: String,

#[serde_as(as = "jsonld::serde::FirstOk")]
pub r#type: PageType,

pub next: String,

pub prev: String,

pub part_of: String,

pub ordered_items: Vec<T>,
}
8 changes: 7 additions & 1 deletion crates/kitsune-type/src/ap/emoji.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,28 @@ use super::object::MediaAttachment;
use crate::jsonld::{self, RdfNode};
use iso8601_timestamp::Timestamp;
use serde::{Deserialize, Serialize};
use serde_with::serde_as;
use serde_with::{serde_as, skip_serializing_none};
use sonic_rs::Value;

#[serde_as]
#[skip_serializing_none]
#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct Emoji {
#[serde(default, rename = "@context")]
pub context: Value,

pub id: String,

#[serde_as(as = "jsonld::serde::FirstOk")]
pub r#type: String,

#[serde_as(as = "jsonld::serde::First")]
pub name: String,

#[serde_as(as = "jsonld::serde::First")]
pub icon: MediaAttachment,

#[serde(default = "Timestamp::now_utc")]
pub updated: Timestamp,
}
Expand Down
29 changes: 27 additions & 2 deletions crates/kitsune-type/src/ap/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use self::{actor::Actor, object::MediaAttachment};
use crate::jsonld::{self, RdfNode};
use iso8601_timestamp::Timestamp;
use serde::{Deserialize, Serialize};
use serde_with::{serde_as, DefaultOnNull, OneOrMany};
use serde_with::{serde_as, skip_serializing_none, DefaultOnNull, OneOrMany};
use sonic_rs::{json, Value};
use strum::AsRefStr;

Expand Down Expand Up @@ -103,17 +103,23 @@ impl ObjectField {
}

#[serde_as]
#[skip_serializing_none]
#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct Activity {
#[serde(default, rename = "@context")]
pub context: Value,

pub id: String,

#[serde_as(as = "jsonld::serde::FirstOk")]
pub r#type: ActivityType,

#[serde_as(as = "jsonld::serde::First<jsonld::serde::Id>")]
pub actor: String,

pub object: ObjectField,

#[serde(default = "Timestamp::now_utc")]
pub published: Timestamp,
}
Expand Down Expand Up @@ -147,39 +153,54 @@ pub enum ObjectType {
}

#[serde_as]
#[skip_serializing_none]
#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct Object {
#[serde(default, rename = "@context")]
pub context: Value,

pub id: String,

#[serde_as(as = "jsonld::serde::FirstOk")]
pub r#type: ObjectType,

#[serde_as(as = "jsonld::serde::First<jsonld::serde::Id>")]
pub attributed_to: String,

#[serde_as(as = "Option<jsonld::serde::First<jsonld::serde::Id>>")]
pub in_reply_to: Option<String>,

#[serde_as(as = "Option<jsonld::serde::First>")]
pub name: Option<String>,

#[serde_as(as = "Option<jsonld::serde::First>")]
pub summary: Option<String>,

#[serde(default)]
#[serde_as(as = "jsonld::serde::First")]
pub content: String,

pub media_type: Option<String>,

#[serde(default)]
#[serde_as(as = "OneOrMany<_>")]
pub attachment: Vec<MediaAttachment>,

#[serde(default)]
#[serde_as(as = "OneOrMany<_>")]
pub tag: Vec<Tag>,

#[serde(default)]
#[serde_as(as = "DefaultOnNull<jsonld::serde::First>")]
pub sensitive: bool,

pub published: Timestamp,

#[serde(default)]
#[serde_as(as = "OneOrMany<jsonld::serde::Id>")]
pub to: Vec<String>,

#[serde(default)]
#[serde_as(as = "OneOrMany<jsonld::serde::Id>")]
pub cc: Vec<String>,
Expand All @@ -199,15 +220,19 @@ pub enum TagType {
}

#[serde_as]
#[skip_serializing_none]
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct Tag {
pub id: Option<String>,

#[serde_as(as = "jsonld::serde::FirstOk")]
pub r#type: TagType,

#[serde_as(as = "jsonld::serde::First")]
pub name: String,

pub href: Option<String>,
#[serde(default)]

#[serde_as(as = "Option<jsonld::serde::First>")]
pub icon: Option<MediaAttachment>,
}
6 changes: 5 additions & 1 deletion crates/kitsune-type/src/ap/object.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use crate::jsonld;
use serde::{Deserialize, Serialize};
use serde_with::serde_as;
use serde_with::{serde_as, skip_serializing_none};

#[derive(Clone, Debug, Deserialize, Serialize)]
pub enum MediaAttachmentType {
Expand All @@ -15,14 +15,18 @@ pub enum MediaAttachmentType {
}

#[serde_as]
#[skip_serializing_none]
#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct MediaAttachment {
#[serde_as(as = "jsonld::serde::FirstOk")]
pub r#type: MediaAttachmentType,

#[serde_as(as = "Option<jsonld::serde::First>")]
pub name: Option<String>,

pub media_type: Option<String>,

#[serde_as(as = "Option<jsonld::serde::First>")]
pub blurhash: Option<String>,

Expand Down
2 changes: 1 addition & 1 deletion crates/kitsune-type/src/jsonld/serde/id.rs
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ where
where
T: DeserializeSeed<'de>,
{
unimplemented!();
unreachable!();
}

fn size_hint(&self) -> Option<usize> {
Expand Down

0 comments on commit 7dea8fd

Please sign in to comment.