diff options
| author | Owen Jacobson <owen@grimoire.ca> | 2023-10-17 21:17:55 -0400 |
|---|---|---|
| committer | Owen Jacobson <owen@grimoire.ca> | 2023-10-17 22:32:21 -0400 |
| commit | 288205e302d9f6afa06b8602184e983d2080a5b6 (patch) | |
| tree | dfb307e8f3cb82d280e5a0392f11318194e09ef1 /src/single.rs | |
CLI tool for updating Route53 DNS for an ASG.
Diffstat (limited to 'src/single.rs')
| -rw-r--r-- | src/single.rs | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/single.rs b/src/single.rs new file mode 100644 index 0000000..b3f0b18 --- /dev/null +++ b/src/single.rs @@ -0,0 +1,24 @@ +pub trait Single { + type Item; + + fn single(self) -> Option<Self::Item>; +} + +impl<T, I> Single for I +where + I: IntoIterator<Item = T>, +{ + type Item = T; + + fn single(self) -> Option<Self::Item> { + let mut iter = self.into_iter(); + + // There are three cases of interest: + // + // 1. `self` has zero items -> return None. + // 2. `self` has two or more items -> return None. + // 3. `self` has exactly one item -> return `iter.next()` unchanged, as + // it holds that item. + iter.next().filter(|_| iter.next().is_none()) + } +} |
