Clippy nits, AnyBase::extend

This commit is contained in:
asonix 2021-01-03 18:11:17 -06:00
parent feb42ee3ed
commit 757df7792d
9 changed files with 133 additions and 21 deletions

View file

@ -1,5 +1,10 @@
# Unreleased # Unreleased
# 0.7.0-alpha.9
- Add default impls for many object kinds
- Add `extend` method on AnyBase
- Clippy nits
# 0.7.0-alpha.8 # 0.7.0-alpha.8
- Add `from_arbitrary_json` to AnyBase - Add `from_arbitrary_json` to AnyBase

View file

@ -1,7 +1,7 @@
[package] [package]
name = "activitystreams" name = "activitystreams"
description = "A set of core types and traits for activitystreams data" description = "A set of core types and traits for activitystreams data"
version = "0.7.0-alpha.8" version = "0.7.0-alpha.9"
license = "GPL-3.0" license = "GPL-3.0"
authors = ["asonix <asonix@asonix.dog>"] authors = ["asonix <asonix@asonix.dog>"]
repository = "https://git.asonix.dog/Aardwolf/activitystreams" repository = "https://git.asonix.dog/Aardwolf/activitystreams"

View file

@ -3604,3 +3604,18 @@ impl<T> OriginRefExt for T where T: OriginRef {}
impl<T> OptTargetRefExt for T where T: OptTargetRef {} impl<T> OptTargetRefExt for T where T: OptTargetRef {}
impl<T> OptOriginRefExt for T where T: OptOriginRef {} impl<T> OptOriginRefExt for T where T: OptOriginRef {}
impl<T> QuestionExt for T where T: AsQuestion {} impl<T> QuestionExt for T where T: AsQuestion {}
impl<Kind> Default for Activity<Kind>
where
Kind: Default,
{
fn default() -> Self {
Self::new()
}
}
impl Default for Question {
fn default() -> Self {
Self::new()
}
}

View file

@ -1637,3 +1637,12 @@ where
self.inner_mut().ap_actor_mut() self.inner_mut().ap_actor_mut()
} }
} }
impl<Kind> Default for Actor<Kind>
where
Kind: Default,
{
fn default() -> Self {
Self::new()
}
}

View file

@ -1120,6 +1120,29 @@ impl AnyBase {
Ok(base.into()) Ok(base.into())
} }
/// Extend this AnyBase into a kind T where T implements Extends<Kind>
///
/// This method returns Ok(None) when the AnyBase does not contain an extensible object, i.e.
/// it's just an IRI
///
/// ```rust
/// # fn main() -> Result<(), anyhow::Error> {
/// # use activitystreams::{object::Video, base::AnyBase};
/// # let video = Video::new();
/// # let any_base = AnyBase::from_extended(video)?;
/// let video: Video = any_base.extend()?;
/// # Ok(())
/// # }
/// ```
pub fn extend<T, Kind>(self) -> Result<Option<T>, T::Error>
where
T: ExtendsExt<Kind>,
<T as Extends<Kind>>::Error: From<serde_json::Error>,
for<'de> Kind: serde::Deserialize<'de>,
{
T::from_any_base(self)
}
/// Convert any type that is extended from `Base<Kind>` into an AnyBase for storing /// Convert any type that is extended from `Base<Kind>` into an AnyBase for storing
/// ///
/// ```rust /// ```rust
@ -1934,3 +1957,12 @@ impl From<&str> for OneOrMany<AnyBase> {
Self::from_xsd_string(xsd_string.to_owned()) Self::from_xsd_string(xsd_string.to_owned())
} }
} }
impl<Kind> Default for Base<Kind>
where
Kind: Default,
{
fn default() -> Self {
Self::new()
}
}

View file

@ -1563,3 +1563,27 @@ where
impl<T, Kind> CollectionExt<Kind> for T where T: AsCollection<Kind> {} impl<T, Kind> CollectionExt<Kind> for T where T: AsCollection<Kind> {}
impl<T, Kind> CollectionPageExt<Kind> for T where T: AsCollectionPage<Kind> {} impl<T, Kind> CollectionPageExt<Kind> for T where T: AsCollectionPage<Kind> {}
impl<T> OrderedCollectionPageExt for T where T: AsOrderedCollectionPage {} impl<T> OrderedCollectionPageExt for T where T: AsOrderedCollectionPage {}
impl<Kind> Default for Collection<Kind>
where
Kind: Default,
{
fn default() -> Self {
Self::new()
}
}
impl<Kind> Default for CollectionPage<Kind>
where
Kind: Default,
{
fn default() -> Self {
Self::new()
}
}
impl Default for OrderedCollectionPage {
fn default() -> Self {
Self::new()
}
}

View file

@ -688,3 +688,12 @@ impl<Kind> AsLink<Kind> for Link<Kind> {
} }
impl<T, Kind> LinkExt<Kind> for T where T: AsLink<Kind> {} impl<T, Kind> LinkExt<Kind> for T where T: AsLink<Kind> {}
impl<Kind> Default for Link<Kind>
where
Kind: Default,
{
fn default() -> Self {
Self::new()
}
}

View file

@ -5609,3 +5609,36 @@ impl AsTombstone for Tombstone {
self self
} }
} }
impl<Kind> Default for Object<Kind>
where
Kind: Default,
{
fn default() -> Self {
Self::new()
}
}
impl Default for Place {
fn default() -> Self {
Self::new()
}
}
impl Default for Profile {
fn default() -> Self {
Self::new()
}
}
impl Default for Relationship {
fn default() -> Self {
Self::new()
}
}
impl Default for Tombstone {
fn default() -> Self {
Self::new()
}
}

View file

@ -249,38 +249,23 @@ struct LengthError;
impl Length { impl Length {
fn is_centimeters(&self) -> bool { fn is_centimeters(&self) -> bool {
match self { matches!(self, Length::Centimeters)
Length::Centimeters => true,
_ => false,
}
} }
fn is_feet(&self) -> bool { fn is_feet(&self) -> bool {
match self { matches!(self, Length::Feet)
Length::Feet => true,
_ => false,
}
} }
fn is_inches(&self) -> bool { fn is_inches(&self) -> bool {
match self { matches!(self, Length::Inches)
Length::Inches => true,
_ => false,
}
} }
fn is_kilometers(&self) -> bool { fn is_kilometers(&self) -> bool {
match self { matches!(self, Length::Kilometers)
Length::Kilometers => true,
_ => false,
}
} }
fn is_meters(&self) -> bool { fn is_meters(&self) -> bool {
match self { matches!(self, Length::Meters)
Length::Meters => true,
_ => false,
}
} }
} }