From 16b839c5d7e102445b61509d76a6053fe024e3b5 Mon Sep 17 00:00:00 2001 From: Akash soni <33283321+akashsoni01@users.noreply.github.com> Date: Wed, 2 Jul 2025 01:02:41 +0530 Subject: [PATCH] #16 iter added --- examples/Iter_example.rs | 28 ++++++++++++++++++++++++++++ tagged-core/src/lib.rs | 18 ++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 examples/Iter_example.rs diff --git a/examples/Iter_example.rs b/examples/Iter_example.rs new file mode 100644 index 0000000..0d201b1 --- /dev/null +++ b/examples/Iter_example.rs @@ -0,0 +1,28 @@ +use tagged_core::Tagged; + +#[derive(Debug)] +struct Org; + +type EmployeeNames = Tagged, Org>; + +fn main() { + let names: EmployeeNames = Tagged::new(vec!["Alice".into(), "Bob".into()]); + + for name in &names { + println!("Name: {name}"); + } + + // Consuming iterator + for name in names { + println!("Owned: {name}"); + } +} + +/* +Name: Alice +Name: Bob +Owned: Alice +Owned: Bob + +Process finished with exit code 0 +*/ \ No newline at end of file diff --git a/tagged-core/src/lib.rs b/tagged-core/src/lib.rs index 901f598..1f160f8 100644 --- a/tagged-core/src/lib.rs +++ b/tagged-core/src/lib.rs @@ -140,6 +140,24 @@ impl<'de, T: Deserialize<'de>, Tag> Deserialize<'de> for Tagged { } } +impl IntoIterator for Tagged, Tag> { + type Item = T; + type IntoIter = std::vec::IntoIter; + + fn into_iter(self) -> Self::IntoIter { + self.value.into_iter() + } +} + +impl<'a, T, Tag> IntoIterator for &'a Tagged, Tag> { + type Item = &'a T; + type IntoIter = std::slice::Iter<'a, T>; + + fn into_iter(self) -> Self::IntoIter { + self.value.iter() + } +} + // For all common primitive types // macro_rules! impl_from_tagged { // ($($t:ty),*) => {