fix(apb): remove ambiguous Iterator impl for node
This commit is contained in:
parent
ae85351b11
commit
4b632faf2a
5 changed files with 20 additions and 27 deletions
|
@ -41,32 +41,6 @@ impl<T : super::Base> From<Option<T>> for Node<T> {
|
|||
}
|
||||
}
|
||||
|
||||
impl<T : super::Base> Iterator for Node<T> {
|
||||
type Item = T;
|
||||
|
||||
fn next(&mut self) -> Option<Self::Item> {
|
||||
match std::mem::replace(self, Self::Empty) {
|
||||
Self::Empty => None,
|
||||
Self::Object(res) => Some(*res),
|
||||
Self::Link(lnk) => {
|
||||
*self = Self::Link(lnk);
|
||||
None
|
||||
},
|
||||
Self::Array(mut arr) => {
|
||||
let mut out = None;
|
||||
while let Some(res) = arr.pop_front() {
|
||||
if let Some(inner) = res.extract() {
|
||||
out = Some(inner);
|
||||
break;
|
||||
}
|
||||
}
|
||||
*self = Self::Array(arr);
|
||||
out
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<T : super::Base> Node<T> {
|
||||
/// return reference to embedded object (or first if many are present)
|
||||
pub fn get(&self) -> Option<&T> {
|
||||
|
|
|
@ -42,6 +42,9 @@ pub fn ActorHeader() -> impl IntoView {
|
|||
Some(view! { <sup class="ml-s"><small>"["{actor_type.as_ref().to_lowercase()}"]"</small></sup> } )
|
||||
};
|
||||
let fields = actor.attachment()
|
||||
.flat()
|
||||
.into_iter()
|
||||
.filter_map(|x| x.extract())
|
||||
.map(|x| view! {
|
||||
<tr>
|
||||
<td class="w-25"><b class="color">{x.name().str().unwrap_or_default()}</b></td>
|
||||
|
|
|
@ -15,6 +15,9 @@ pub fn Object(object: crate::Object) -> impl IntoView {
|
|||
let public = addressed.iter().any(|x| x.as_str() == apb::target::PUBLIC);
|
||||
let external_url = object.url().id().str().unwrap_or_else(|| oid.clone());
|
||||
let attachments = object.attachment()
|
||||
.flat()
|
||||
.into_iter()
|
||||
.filter_map(|x| x.extract()) // TODO maybe show links?
|
||||
.map(|x| view! { <Attachment object=x sensitive=sensitive /> })
|
||||
.collect_view();
|
||||
let comments = object.replies().get()
|
||||
|
|
|
@ -35,7 +35,17 @@ pub fn SearchPage() -> impl IntoView {
|
|||
let search = format!("{URL_BASE}/search?q={q}");
|
||||
async move {
|
||||
let items = Http::fetch::<serde_json::Value>(&search, auth).await.ok()?;
|
||||
Some(crate::timeline::process_activities(items.ordered_items().collect(), auth).await)
|
||||
Some(
|
||||
crate::timeline::process_activities(
|
||||
items
|
||||
.ordered_items()
|
||||
.flat()
|
||||
.into_iter()
|
||||
.filter_map(|x| x.extract())
|
||||
.collect(),
|
||||
auth
|
||||
).await
|
||||
)
|
||||
}
|
||||
}
|
||||
);
|
||||
|
|
|
@ -87,6 +87,9 @@ impl Timeline {
|
|||
let collection : serde_json::Value = Http::fetch(&feed_url, auth).await?;
|
||||
let activities : Vec<serde_json::Value> = collection
|
||||
.ordered_items()
|
||||
.flat()
|
||||
.into_iter()
|
||||
.filter_map(|x| x.extract())
|
||||
.collect();
|
||||
|
||||
let mut feed = self.feed.get_untracked();
|
||||
|
|
Loading…
Reference in a new issue