From 9183d04e6674f8b6a67f3fb8892bee56b242e646 Mon Sep 17 00:00:00 2001 From: Kitaiti Makoto Date: Sun, 3 Apr 2022 19:22:09 +0900 Subject: [PATCH] Fix Post::from_activity07() for borrow checker --- plume-models/src/posts.rs | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/plume-models/src/posts.rs b/plume-models/src/posts.rs index 8e374614..f857d462 100644 --- a/plume-models/src/posts.rs +++ b/plume-models/src/posts.rs @@ -14,7 +14,9 @@ use activitystreams::{ base::{AnyBase, Base}, iri_string::types::IriString, link::{self as link07, kind::MentionType}, - object::{ApObject, Article as Article07, Image as Image07, Tombstone as Tombstone07}, + object::{ + kind::ImageType, ApObject, Article as Article07, Image as Image07, Tombstone as Tombstone07, + }, prelude::*, time::OffsetDateTime, }; @@ -1047,7 +1049,7 @@ impl FromId07 for Post { let cover = article.icon().and_then(|icon| { icon.iter().next().and_then(|img| { - let image: Image07 = img.extend().ok()??; + let image = img.to_owned().extend::().ok()??; Media::from_activity07(conn, &image).ok().map(|m| m.id) }) }); @@ -1056,16 +1058,14 @@ impl FromId07 for Post { .name() .and_then(|name| name.to_as_string()) .ok_or(Error::MissingApProperty)?; + let id = AnyBase::from_extended(article.clone()) // FIXME: Don't clone + .ok() + .ok_or(Error::MissingApProperty)? + .id() + .map(|id| id.to_string()); let ap_url = article .url() - .and_then(|url| { - url.to_as_uri().or_else(|| { - AnyBase::from_extended(article) - .ok()? - .id() - .map(|id| id.to_string()) - }) - }) + .and_then(|url| url.to_as_uri().or(id)) .ok_or(Error::MissingApProperty)?; let post = Post::from_db07(conn, &ap_url) .and_then(|mut post| { @@ -1104,7 +1104,7 @@ impl FromId07 for Post { updated = true; } if post.source != source { - post.source = source; + post.source = source.clone(); // FIXME: Don't clone updated = true; } if post.cover_id != cover { @@ -1171,17 +1171,19 @@ impl FromId07 for Post { .collect::>(); if let Some(tags) = article.tag() { for tag in tags.iter() { - tag.extend::() + tag.clone() + .extend::() // FIXME: Don't clone .map(|mention| { mention.map(|m| Mention::from_activity07(conn, &m, post.id, true, true)) }) .ok(); - tag.extend::() + tag.clone() + .extend::() // FIXME: Don't clone .and_then(|hashtag| { Ok(hashtag.and_then(|t| { - let tag_name = t.name?.as_str(); - Tag::from_activity07(conn, &t, post.id, hashtags.remove(tag_name)).ok() + let tag_name = t.name.clone()?.as_str().to_string(); + Tag::from_activity07(conn, &t, post.id, hashtags.remove(&tag_name)).ok() })) }) .ok();