open_timeline_core/reduced/
entities.rs1use crate::{IsReducedCollection, IsReducedType, Name, OpenTimelineId, ReducedEntity};
8use serde::{Deserialize, Serialize};
9use std::collections::BTreeSet;
10
11#[rustfmt::skip]
13#[derive(derive_more::IntoIterator, Serialize, Deserialize, Default, PartialEq, Eq, Debug, Clone, PartialOrd, Ord, Hash)]
14#[into_iterator(owned, ref, ref_mut)]
15pub struct ReducedEntities(BTreeSet<ReducedEntity>);
16
17impl IsReducedCollection for ReducedEntities {
18 type Item = ReducedEntity;
19
20 fn collection(&self) -> &BTreeSet<<Self as IsReducedCollection>::Item> {
21 &self.0
22 }
23
24 fn collection_mut(&mut self) -> &mut BTreeSet<<Self as IsReducedCollection>::Item> {
25 &mut self.0
26 }
27}
28
29impl FromIterator<ReducedEntity> for ReducedEntities {
31 fn from_iter<T: IntoIterator<Item = ReducedEntity>>(iter: T) -> Self {
32 ReducedEntities(iter.into_iter().collect())
33 }
34}
35
36impl ReducedEntities {
37 pub fn new() -> Self {
39 ReducedEntities(BTreeSet::new())
40 }
41
42 pub fn ordered_by_name(&self) -> Vec<ReducedEntity> {
43 let mut sorted: Vec<_> = self.0.clone().into_iter().collect();
44 sorted.sort_by(|a, b| a.name().as_str().cmp(b.name().as_str()));
45 sorted
46 }
47
48 pub fn ordered_by_id(&self) -> Vec<ReducedEntity> {
49 let mut sorted: Vec<_> = self.0.clone().into_iter().collect();
50 sorted.sort_by_key(|a| a.id());
51 sorted
52 }
53
54 pub fn ids(&self) -> BTreeSet<OpenTimelineId> {
55 self.0.clone().into_iter().map(|e| e.id()).collect()
56 }
57
58 pub fn names(&self) -> BTreeSet<Name> {
59 self.0
60 .clone()
61 .into_iter()
62 .map(|e| e.name().to_owned())
63 .collect()
64 }
65}