summaryrefslogtreecommitdiff
path: root/mingling
diff options
context:
space:
mode:
Diffstat (limited to 'mingling')
-rw-r--r--mingling/src/parser/picker.rs39
1 files changed, 26 insertions, 13 deletions
diff --git a/mingling/src/parser/picker.rs b/mingling/src/parser/picker.rs
index 6743053..05021a7 100644
--- a/mingling/src/parser/picker.rs
+++ b/mingling/src/parser/picker.rs
@@ -129,7 +129,7 @@ pub trait Pickable {
#[doc(hidden)]
macro_rules! define_pick_structs {
- ($n:tt $($T:ident $val:ident),+) => {
+ ($n:tt $final:ident $final_val:ident $($T:ident $val:ident),+) => {
#[doc(hidden)]
pub struct $n<$($T,)+ R>
where
@@ -173,6 +173,19 @@ macro_rules! define_pick_structs {
pub fn unpack_directly(self) -> ($($T,)+) {
($(self.$val,)+)
}
+
+ /// Applies a transformation to the last extracted value.
+ ///
+ /// Takes a closure that receives the last extracted value and returns a new value of the same type.
+ /// The transformed value replaces the original value in the builder.
+ /// This method can be used to modify or validate the extracted value before final unpacking.
+ pub fn after<F>(mut self, edit: F) -> Self
+ where
+ F: Fn($final) -> $final,
+ {
+ self.$final_val = edit(self.$final_val);
+ self
+ }
}
};
}
@@ -276,18 +289,18 @@ macro_rules! impl_pick_structs {
};
}
-define_pick_structs! { Pick1 T1 val_1 }
-define_pick_structs! { Pick2 T1 val_1, T2 val_2 }
-define_pick_structs! { Pick3 T1 val_1, T2 val_2, T3 val_3 }
-define_pick_structs! { Pick4 T1 val_1, T2 val_2, T3 val_3, T4 val_4 }
-define_pick_structs! { Pick5 T1 val_1, T2 val_2, T3 val_3, T4 val_4, T5 val_5 }
-define_pick_structs! { Pick6 T1 val_1, T2 val_2, T3 val_3, T4 val_4, T5 val_5, T6 val_6 }
-define_pick_structs! { Pick7 T1 val_1, T2 val_2, T3 val_3, T4 val_4, T5 val_5, T6 val_6, T7 val_7 }
-define_pick_structs! { Pick8 T1 val_1, T2 val_2, T3 val_3, T4 val_4, T5 val_5, T6 val_6, T7 val_7, T8 val_8 }
-define_pick_structs! { Pick9 T1 val_1, T2 val_2, T3 val_3, T4 val_4, T5 val_5, T6 val_6, T7 val_7, T8 val_8, T9 val_9 }
-define_pick_structs! { Pick10 T1 val_1, T2 val_2, T3 val_3, T4 val_4, T5 val_5, T6 val_6, T7 val_7, T8 val_8, T9 val_9, T10 val_10 }
-define_pick_structs! { Pick11 T1 val_1, T2 val_2, T3 val_3, T4 val_4, T5 val_5, T6 val_6, T7 val_7, T8 val_8, T9 val_9, T10 val_10, T11 val_11 }
-define_pick_structs! { Pick12 T1 val_1, T2 val_2, T3 val_3, T4 val_4, T5 val_5, T6 val_6, T7 val_7, T8 val_8, T9 val_9, T10 val_10, T11 val_11, T12 val_12 }
+define_pick_structs! { Pick1 T1 val_1 T1 val_1 }
+define_pick_structs! { Pick2 T2 val_2 T1 val_1, T2 val_2 }
+define_pick_structs! { Pick3 T3 val_3 T1 val_1, T2 val_2, T3 val_3 }
+define_pick_structs! { Pick4 T4 val_4 T1 val_1, T2 val_2, T3 val_3, T4 val_4 }
+define_pick_structs! { Pick5 T5 val_5 T1 val_1, T2 val_2, T3 val_3, T4 val_4, T5 val_5 }
+define_pick_structs! { Pick6 T6 val_6 T1 val_1, T2 val_2, T3 val_3, T4 val_4, T5 val_5, T6 val_6 }
+define_pick_structs! { Pick7 T7 val_7 T1 val_1, T2 val_2, T3 val_3, T4 val_4, T5 val_5, T6 val_6, T7 val_7 }
+define_pick_structs! { Pick8 T8 val_8 T1 val_1, T2 val_2, T3 val_3, T4 val_4, T5 val_5, T6 val_6, T7 val_7, T8 val_8 }
+define_pick_structs! { Pick9 T9 val_9 T1 val_1, T2 val_2, T3 val_3, T4 val_4, T5 val_5, T6 val_6, T7 val_7, T8 val_8, T9 val_9 }
+define_pick_structs! { Pick10 T10 val_10 T1 val_1, T2 val_2, T3 val_3, T4 val_4, T5 val_5, T6 val_6, T7 val_7, T8 val_8, T9 val_9, T10 val_10 }
+define_pick_structs! { Pick11 T11 val_11 T1 val_1, T2 val_2, T3 val_3, T4 val_4, T5 val_5, T6 val_6, T7 val_7, T8 val_8, T9 val_9, T10 val_10, T11 val_11 }
+define_pick_structs! { Pick12 T12 val_12 T1 val_1, T2 val_2, T3 val_3, T4 val_4, T5 val_5, T6 val_6, T7 val_7, T8 val_8, T9 val_9, T10 val_10, T11 val_11, T12 val_12 }
impl_pick_structs! { Pick1 Pick2 val_2 T1 val_1 }
impl_pick_structs! { Pick2 Pick3 val_3 T1 val_1, T2 val_2 }