Expand description
Derive macros for Activity Streams
§Examples
First, add serde and activitystreams-derive to your Cargo.toml
activitystreams-derive = "0.5.0"
# or activitystreams = "0.5.0"
serde = { version = "1.0", features = ["derive"] }use activitystreams_derive::{properties, UnitString};
// or activitystreams::{properties, UnitString};
use serde_json::Value;
/// Using the UnitString derive macro
///
/// This macro implements Serialize and Deserialize for the given type, making this type
/// represent the string "SomeKind" in JSON.
#[derive(Clone, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd, UnitString)]
#[unit_string(SomeKind)]
pub struct MyKind;
/// Using the properties macro
///
/// This macro generates getters and setters for the associated fields.
properties! {
My {
context {
types [
String,
],
rename("@context"),
},
kind {
types [
MyKind,
],
functional,
required,
rename("type"),
},
required_key {
types [
Value,
],
functional,
required,
alias [
"someKey",
"existingKey",
"woooKey",
],
},
}
}
fn main () -> Result<(), Box<dyn std::error::Error>> {
let s = r#"{
"@context": "http://www.w3c.org/ns#activitystreams",
"type": "SomeKind",
"woooKey": {
"key": "value"
}
}"#;
let m: MyProperties = serde_json::from_str(s)?;
assert_eq!(&MyKind, m.get_kind());
Ok(())
}Macros§
- properties
- Generate structs and enums for activitystreams objects
Attribute Macros§
- wrapper_
type - Derive a wrapper type based on serde_json::Value to contain any possible trait type
Derive Macros§
- Extensible
- Generate a type with default extensions
- Prop
Refs - Derive implementations for activitystreams objects
- Unit
String - Derive implementations Serialize and Deserialize for a constant string Struct type