/** * Representation of Actors in the activitystream. * * SPDX-FileCopyrightText: 2023 Eilertsens Kodeknekkeri * SPDX-FileCopyrightText: 2023 Harald Eilertsen * * SPDX-License-Identifier: AGPL-3.0-or-later */ use serde::Deserialize; use url::Url; #[derive(Debug, Deserialize, PartialEq)] pub struct Actor { pub name: String, address: Option, url: Option, id: String, id_sig: String, key: String, } #[cfg(test)] mod test { use super::*; #[test] fn test_parsing_actor_from_json() { let json = r#" { "name": "Benjamin Franklin", "address": "ben@example.com", "url": "https://example.com/channel/ben", "network": "zot6", "photo": { "mimetype": "image/jpeg", "src": "https://example.com/photo/profile/m/2" }, "id": "rUpgk2qbvnWLoKIXOlZlwlqI5vk8C4NgudFNjbcmnOBjFSXU34TObkZEClaPSfKnpFZpg87tANtko7WGs7QRvA", "id_sig": "sha256.ZD8uwYmUEG_d02Y...", "key": "-----BEGIN PUBLIC KEY-----\n....\n-----END PUBLIC KEY-----\n" }"#; let actor: Actor = serde_json::from_str(&json).unwrap(); assert_eq!("Benjamin Franklin", actor.name); assert_eq!("ben@example.com", &actor.address.unwrap()); assert_eq!("https://example.com/channel/ben", actor.url.unwrap().to_string()); assert_eq!("rUpgk2qbvnWLoKIXOlZlwlqI5vk8C4NgudFNjbcmnOBjFSXU34TObkZEClaPSfKnpFZpg87tANtko7WGs7QRvA", actor.id); } #[test] fn test_parsing_actor_without_address_from_json() { let json = r#" { "name": "Benjamin Franklin", "url": "https://example.com/channel/ben", "network": "zot6", "photo": { "mimetype": "image/jpeg", "src": "https://example.com/photo/profile/m/2" }, "id": "rUpgk2qbvnWLoKIXOlZlwlqI5vk8C4NgudFNjbcmnOBjFSXU34TObkZEClaPSfKnpFZpg87tANtko7WGs7QRvA", "id_sig": "sha256.ZD8uwYmUEG_d02Y...", "key": "-----BEGIN PUBLIC KEY-----\n....\n-----END PUBLIC KEY-----\n" }"#; let actor: Actor = serde_json::from_str(&json).unwrap(); assert_eq!("Benjamin Franklin", actor.name); assert_eq!(None, actor.address); assert_eq!("https://example.com/channel/ben", actor.url.unwrap().to_string()); assert_eq!("rUpgk2qbvnWLoKIXOlZlwlqI5vk8C4NgudFNjbcmnOBjFSXU34TObkZEClaPSfKnpFZpg87tANtko7WGs7QRvA", actor.id); } #[test] fn test_parsing_actor_without_url_from_json() { let json = r#" { "name":"Diaspora User", "address":"someone@diaspora.example.com", "network":"diaspora", "photo":{"mimetype":"image\/jpeg", "src":"https:\/\/example.com\/photo\/c992335849828915b5c963b985f68f46-5"}, "id":"349ab82134669a3b", "id_sig":"", "key":"-----BEGIN PUBLIC KEY-----\n\n-----END PUBLIC KEY-----\n" } "#; let actor: Actor = serde_json::from_str(&json).unwrap(); assert_eq!("Diaspora User", actor.name); assert_eq!("someone@diaspora.example.com", actor.address.unwrap()); assert_eq!(None, actor.url); } }