orx_iterable/sources/
once.rs1use crate::{Collection, CollectionMut, Iterable};
2
3pub struct Once<T>
5where
6 T: Clone,
7{
8 pub(crate) value: T,
9}
10
11impl<T> Iterable for Once<T>
12where
13 T: Clone,
14{
15 type Item = T;
16
17 type Iter = core::iter::Once<T>;
18
19 fn iter(&self) -> Self::Iter {
20 core::iter::once(self.value.clone())
21 }
22}
23
24impl<T> Iterable for core::iter::Once<T>
25where
26 T: Clone,
27{
28 type Item = T;
29
30 type Iter = core::iter::Once<T>;
31
32 fn iter(&self) -> Self::Iter {
33 self.clone()
34 }
35}
36
37pub struct OnceCol<T> {
41 pub(crate) value: T,
42}
43
44impl<'a, T> Iterable for &'a OnceCol<T> {
45 type Item = &'a T;
46
47 type Iter = core::iter::Once<Self::Item>;
48
49 fn iter(&self) -> Self::Iter {
50 core::iter::once(&self.value)
51 }
52}
53
54impl<T> Collection for OnceCol<T> {
55 type Item = T;
56
57 type Iterable<'i>
58 = &'i Self
59 where
60 Self: 'i;
61
62 fn as_iterable(&self) -> Self::Iterable<'_> {
63 self
64 }
65}
66
67impl<T> CollectionMut for OnceCol<T> {
68 type IterMut<'i>
69 = core::iter::Once<&'i mut T>
70 where
71 Self: 'i;
72
73 fn iter_mut(&mut self) -> Self::IterMut<'_> {
74 core::iter::once(&mut self.value)
75 }
76}
77
78pub fn once<T>(value: T) -> Once<T>
80where
81 T: Clone,
82{
83 Once { value }
84}
85
86pub fn once_col<T>(value: T) -> OnceCol<T> {
88 OnceCol { value }
89}