/* * This file is part of ActivityStreams Types. * * Copyright © 2018 Riley Trautman * * ActivityStreams Types is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * ActivityStreams Types is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with ActivityStreams Types. If not, see . */ //! Namespace for Actor types use activitystreams_traits::{Actor, Object}; use object::{properties::ObjectProperties, ObjectExt}; pub mod kind; use self::kind::*; /// Describes a software application. #[derive(Clone, Debug, Default, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] pub struct Application { #[serde(rename = "type")] kind: ApplicationType, /// Adds all valid object properties to this struct #[serde(flatten)] pub object_props: ObjectProperties, } impl Object for Application {} impl ObjectExt for Application { fn props(&self) -> &ObjectProperties { &self.object_props } fn props_mut(&mut self) -> &mut ObjectProperties { &mut self.object_props } } impl Actor for Application {} /// Represents a formal or informal collective of Actors. #[derive(Clone, Debug, Default, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] pub struct Group { #[serde(rename = "type")] kind: GroupType, /// Adds all valid object properties to this struct #[serde(flatten)] pub object_props: ObjectProperties, } impl Object for Group {} impl ObjectExt for Group { fn props(&self) -> &ObjectProperties { &self.object_props } fn props_mut(&mut self) -> &mut ObjectProperties { &mut self.object_props } } impl Actor for Group {} /// Represents an organization. #[derive(Clone, Debug, Default, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] pub struct Organization { #[serde(rename = "type")] kind: OrganizationType, /// Adds all valid object properties to this struct #[serde(flatten)] pub object_props: ObjectProperties, } impl Object for Organization {} impl ObjectExt for Organization { fn props(&self) -> &ObjectProperties { &self.object_props } fn props_mut(&mut self) -> &mut ObjectProperties { &mut self.object_props } } impl Actor for Organization {} /// Represents an individual person. #[derive(Clone, Debug, Default, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] pub struct Person { #[serde(rename = "type")] kind: PersonType, /// Adds all valid object properties to this struct #[serde(flatten)] pub object_props: ObjectProperties, } impl Object for Person {} impl ObjectExt for Person { fn props(&self) -> &ObjectProperties { &self.object_props } fn props_mut(&mut self) -> &mut ObjectProperties { &mut self.object_props } } impl Actor for Person {} /// Represents a service of any kind. #[derive(Clone, Debug, Default, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] pub struct Service { #[serde(rename = "type")] kind: ServiceType, /// Adds all valid object properties to this struct #[serde(flatten)] pub object_props: ObjectProperties, } impl Object for Service {} impl ObjectExt for Service { fn props(&self) -> &ObjectProperties { &self.object_props } fn props_mut(&mut self) -> &mut ObjectProperties { &mut self.object_props } } impl Actor for Service {}