feat(apb): add optional shortcuts
This commit is contained in:
parent
f82e624fd9
commit
fc43183ce1
3 changed files with 59 additions and 1 deletions
|
@ -23,7 +23,7 @@ sea-orm = { version = "1.0", optional = true, default-features = false }
|
||||||
reqwest = { version = "0.12", features = ["json"], optional = true }
|
reqwest = { version = "0.12", features = ["json"], optional = true }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = ["activitypub-miscellaneous-terms", "send"]
|
default = ["activitypub-miscellaneous-terms", "send", "shortcuts"]
|
||||||
# extensions
|
# extensions
|
||||||
activitypub-miscellaneous-terms = [] # https://swicg.github.io/miscellany/
|
activitypub-miscellaneous-terms = [] # https://swicg.github.io/miscellany/
|
||||||
activitypub-counters = [] # https://ns.alemi.dev/as/counters/#
|
activitypub-counters = [] # https://ns.alemi.dev/as/counters/#
|
||||||
|
@ -38,6 +38,7 @@ jsonld = []
|
||||||
send = []
|
send = []
|
||||||
orm = ["dep:sea-orm"]
|
orm = ["dep:sea-orm"]
|
||||||
fetch = ["dep:reqwest"]
|
fetch = ["dep:reqwest"]
|
||||||
|
shortcuts = []
|
||||||
# providers
|
# providers
|
||||||
unstructured = ["dep:serde_json"]
|
unstructured = ["dep:serde_json"]
|
||||||
#TODO eventually also make a structured base?
|
#TODO eventually also make a structured base?
|
||||||
|
|
|
@ -104,6 +104,11 @@ pub use key::{PublicKey, PublicKeyMut};
|
||||||
pub mod field;
|
pub mod field;
|
||||||
pub use field::{Field, FieldErr};
|
pub use field::{Field, FieldErr};
|
||||||
|
|
||||||
|
#[cfg(feature = "shortcuts")]
|
||||||
|
pub mod shortcuts;
|
||||||
|
#[cfg(feature = "shortcuts")]
|
||||||
|
pub use shortcuts::Shortcuts;
|
||||||
|
|
||||||
#[cfg(feature = "jsonld")]
|
#[cfg(feature = "jsonld")]
|
||||||
mod jsonld;
|
mod jsonld;
|
||||||
|
|
||||||
|
|
52
apb/src/shortcuts.rs
Normal file
52
apb/src/shortcuts.rs
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
use crate::{Collection, Object};
|
||||||
|
|
||||||
|
|
||||||
|
pub trait Shortcuts: crate::Object {
|
||||||
|
fn likes_count(&self) -> crate::Field<i32> {
|
||||||
|
let x = self
|
||||||
|
.likes()
|
||||||
|
.inner()?
|
||||||
|
.total_items()?
|
||||||
|
.min(i32::MAX as u64)
|
||||||
|
as i32;
|
||||||
|
Ok(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn shares_count(&self) -> crate::Field<i32> {
|
||||||
|
let x = self
|
||||||
|
.shares()
|
||||||
|
.inner()?
|
||||||
|
.total_items()?
|
||||||
|
.min(i32::MAX as u64)
|
||||||
|
as i32;
|
||||||
|
Ok(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn replies_count(&self) -> crate::Field<i32> {
|
||||||
|
let x = self
|
||||||
|
.replies()
|
||||||
|
.inner()?
|
||||||
|
.total_items()?
|
||||||
|
.min(i32::MAX as u64)
|
||||||
|
as i32;
|
||||||
|
Ok(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn image_url(&self) -> crate::Field<String> {
|
||||||
|
let image_node = self.image();
|
||||||
|
let image = image_node.inner()?;
|
||||||
|
let url = image.url();
|
||||||
|
let id = url.id()?;
|
||||||
|
Ok(id.to_string())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn icon_url(&self) -> crate::Field<String> {
|
||||||
|
let icon_node = self.icon();
|
||||||
|
let icon = icon_node.inner()?;
|
||||||
|
let url = icon.url();
|
||||||
|
let id = url.id()?;
|
||||||
|
Ok(id.to_string())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: crate::Object> Shortcuts for T {}
|
Loading…
Reference in a new issue