summaryrefslogtreecommitdiff
path: root/src/util.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/util.rs')
-rw-r--r--src/util.rs34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/util.rs b/src/util.rs
new file mode 100644
index 0000000..309a471
--- /dev/null
+++ b/src/util.rs
@@ -0,0 +1,34 @@
+macro_rules! enum_with_get_inner {
+ (
+ inner = $inner: ty;
+ $(#[$attr: meta])*
+ $visibility: vis enum $enum_name: ident {
+ $(
+ $(#[$variant_attr: meta])*
+ $variant: ident($variant_inner: ty),
+ )*
+ }
+ ) => {
+ $(#[$attr])*
+ $visibility enum $enum_name {
+ $(
+ $(#[$variant_attr])*
+ $variant($inner)
+ ),*
+ }
+
+ impl $enum_name {
+ /// Returns the inner value.
+ #[must_use]
+ pub fn inner(&self) -> &$inner {
+ match self {
+ $(
+ $enum_name::$variant(inner) => inner
+ ),*
+ }
+ }
+ }
+ };
+}
+
+pub(crate) use enum_with_get_inner;