#enums #macro #variant #options #convert #newtype #value

no-std as_variant

A simple macro to convert enums with newtype variants to Options

4 stable releases

1.2.0 Aug 9, 2023
1.1.0 Sep 14, 2022
1.0.1 Sep 13, 2022

#57 in No standard library

Download history 1815/week @ 2024-07-29 1474/week @ 2024-08-05 1084/week @ 2024-08-12 1250/week @ 2024-08-19 1592/week @ 2024-08-26 1896/week @ 2024-09-02 1616/week @ 2024-09-09 1857/week @ 2024-09-16 2062/week @ 2024-09-23 2009/week @ 2024-09-30 1788/week @ 2024-10-07 2129/week @ 2024-10-14 1425/week @ 2024-10-21 1609/week @ 2024-10-28 1875/week @ 2024-11-04 1899/week @ 2024-11-11

6,897 downloads per month
Used in 36 crates (10 directly)

MPL-2.0 license

8KB

as_variant

docs.rs

A simple Rust macro to convert enums with newtype variants to Options.

Basic example:

use std::ops::Deref;

use as_variant::as_variant;

enum Value {
    Integer(i64),
    String(String),
    Array(Vec<Value>),
}

impl Value {
    pub fn as_integer(&self) -> Option<i64> {
        as_variant!(self, Self::Integer).copied()
    }

    pub fn as_str(&self) -> Option<&str> {
        as_variant!(self, Self::String).map(Deref::deref)
    }

    pub fn as_array(&self) -> Option<&[Value]> {
        as_variant!(self, Self::Array).map(Deref::deref)
    }

    pub fn into_string(self) -> Option<String> {
        as_variant!(self, Self::String)
    }

    pub fn into_array(self) -> Option<Vec<Value>> {
        as_variant!(self, Self::Array)
    }
}

lib.rs:

Provides a simple macro to convert enums with newtype variants to Options.

No runtime deps