#json #serialization #web #json-object

jrd

json资源描述符,按照 https://www.packetizer.com/json/jrd/ 规范

1 个不稳定版本

0.1.0 2024年3月21日

#1746 in 编码

MIT 许可证

14KB

jrd

json资源描述符,按照 https://www.packetizer.com/json/jrd/ 规范

这个小巧的crate提供了Json资源描述符的struct表示,并派生了serde traits

有关其使用的更多信息,请访问 docs.rs

原因

这个crate非常小巧,功能也很少,主要依赖于Packetizer的文档

我在一个项目中编写了这个crate和文档,为了更好地了解JRD,我认为其他人可能也会觉得它有用,所以我决定公开分享


lib.rs:

JRD

from Packetizer

JSON资源描述符(JRD)是一个简单的JSON对象,用于描述互联网上的“资源”,其中“资源”是指通过URI或IRI标识的任何互联网实体。例如,一个人的账户URI(例如,acct:[email protected])是一种资源。所有的Web URI(例如,https://www.packetizer.com/)也是。

JSON资源描述符最初在RFC 6415中提出,基于可扩展资源描述符(XRD)格式,被用于WebFinger协议,尽管它的使用不仅限于WebFinger或RFC 6415。

这个crate提供了JRDs [JsonResourceDescriptor]的结构表示,以及serde::Serialize和serde::Deserialize的实现。

所有文档都是直接从packetizer.com复制过来的。

用法

let jrd_string = r#"{
  "subject": "acct:[email protected]",
  "properties": {
    "http://packetizer.com/ns/name": "Paul E. Jones"
  },
  "links": [
    {
      "rel": "http://webfinger.net/rel/profile-page",
      "href": "http://www.packetizer.com/people/paulej/"
    },
    {
      "rel": "http://packetizer.com/rel/blog",
      "type": "text/html",
      "href": "http://www.packetizer.com/people/paulej/blog/",
      "titles": {
        "en-us": "Paul E. Jones' Blog"
      }
    }
  ]
}"#;

let jrd_struct = jrd::JsonResourceDescriptor {
  subject: "acct:[email protected]".into(),
  aliases: Vec::new(),
  properties: [("http://packetizer.com/ns/name".to_string(), "Paul E. Jones".to_string())].into(),
  expires: None,
  links: vec![
    jrd::JsonResourceDescriptorLink {
      rel: "http://webfinger.net/rel/profile-page".into(),
      href: Some("http://www.packetizer.com/people/paulej/".into()),
      link_type: None,
      titles: jrd::Map::default(),
      properties: jrd::Map::default(),
    },
    jrd::JsonResourceDescriptorLink {
      rel: "http://packetizer.com/rel/blog".into(),
      href: Some("http://www.packetizer.com/people/paulej/blog/".into()),
      link_type: Some("text/html".into()),
      titles: [("en-us".to_string(), "Paul E. Jones' Blog".to_string())].into(),
      properties: jrd::Map::default(),
    },
  ],
};

// deserialize
assert_eq!(serde_json::from_str::<jrd::JsonResourceDescriptor>(jrd_string).unwrap(), jrd_struct);

// serialize
assert_eq!(serde_json::to_string_pretty(&jrd_struct).unwrap(), jrd_string)

依赖项

~1.3–2.1MB
~40K SLoC