From 288205e302d9f6afa06b8602184e983d2080a5b6 Mon Sep 17 00:00:00 2001 From: Owen Jacobson Date: Tue, 17 Oct 2023 21:17:55 -0400 Subject: CLI tool for updating Route53 DNS for an ASG. --- src/single.rs | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 src/single.rs (limited to 'src/single.rs') 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; +} + +impl Single for I +where + I: IntoIterator, +{ + type Item = T; + + fn single(self) -> Option { + 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()) + } +} -- cgit v1.2.3