diff options
Diffstat (limited to 'rust/vendor/enum_primitive')
-rw-r--r-- | rust/vendor/enum_primitive/.cargo-checksum.json | 1 | ||||
-rw-r--r-- | rust/vendor/enum_primitive/Cargo.toml | 14 | ||||
-rw-r--r-- | rust/vendor/enum_primitive/LICENSE | 20 | ||||
-rw-r--r-- | rust/vendor/enum_primitive/README.md | 49 | ||||
-rw-r--r-- | rust/vendor/enum_primitive/src/lib.rs | 196 | ||||
-rw-r--r-- | rust/vendor/enum_primitive/tests/image.rs | 109 | ||||
-rw-r--r-- | rust/vendor/enum_primitive/tests/omitted-discriminants.rs | 63 | ||||
-rw-r--r-- | rust/vendor/enum_primitive/tests/tests.rs | 235 |
8 files changed, 687 insertions, 0 deletions
diff --git a/rust/vendor/enum_primitive/.cargo-checksum.json b/rust/vendor/enum_primitive/.cargo-checksum.json new file mode 100644 index 0000000..4e44e5a --- /dev/null +++ b/rust/vendor/enum_primitive/.cargo-checksum.json @@ -0,0 +1 @@ +{"files":{"Cargo.toml":"e7b6bdb1190e8cd669a4c505d89026b3993909c1333b527008fee7bb77c4ece5","LICENSE":"be8048b6ca5224fa349ffe12a0b1123446049e885f9f5b88ae12058224fd715d","README.md":"536388f4e248843596bdec4fa98fb4c8a611ef90d5baf8fb4186e87c87b3eb5e","src/lib.rs":"9cdc041e43737523bd9c987312183518b9afdb19b7d3d4b34f5e6d460ba24cf8","tests/image.rs":"fef7a77a60ff5b3310af47efd1fc237091c9eae973b69b06d7bc6aed79f290ed","tests/omitted-discriminants.rs":"85d7f497f2ac9a4a6ec62c28559b10c31e34e1965436dba9717cbe5dbbf47fcc","tests/tests.rs":"098f860645da54efab483ddaed70c30bfc3ce843d2ea379989283418367653b9"},"package":"be4551092f4d519593039259a9ed8daedf0da12e5109c5280338073eaeb81180"}
\ No newline at end of file diff --git a/rust/vendor/enum_primitive/Cargo.toml b/rust/vendor/enum_primitive/Cargo.toml new file mode 100644 index 0000000..d4d41dd --- /dev/null +++ b/rust/vendor/enum_primitive/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "enum_primitive" +version = "0.1.1" +license = "MIT" +description = "Macro to generate num::FromPrimitive instances for enum that works in Rust 1.0" +authors = ["Anders Kaseorg <andersk@mit.edu>"] +documentation = "https://andersk.github.io/enum_primitive-rs/enum_primitive/" +repository = "https://github.com/andersk/enum_primitive-rs.git" +homepage = "https://github.com/andersk/enum_primitive-rs" +readme = "README.md" + +[dependencies.num-traits] +version = "0.1.32" +default-features = false diff --git a/rust/vendor/enum_primitive/LICENSE b/rust/vendor/enum_primitive/LICENSE new file mode 100644 index 0000000..3430de3 --- /dev/null +++ b/rust/vendor/enum_primitive/LICENSE @@ -0,0 +1,20 @@ +Copyright (c) 2015 Anders Kaseorg <andersk@mit.edu> + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +“Software”), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/rust/vendor/enum_primitive/README.md b/rust/vendor/enum_primitive/README.md new file mode 100644 index 0000000..539e4b0 --- /dev/null +++ b/rust/vendor/enum_primitive/README.md @@ -0,0 +1,49 @@ +# enum_primitive [![Build Status](https://travis-ci.org/andersk/enum_primitive-rs.svg?branch=master)](https://travis-ci.org/andersk/enum_primitive-rs) + +This crate exports a macro `enum_from_primitive!` that wraps an +`enum` declaration and automatically adds an implementation of +`num::FromPrimitive` (reexported here), to allow conversion from +primitive integers to the enum. It therefore provides an +alternative to the built-in `#[derive(FromPrimitive)]`, which +requires the unstable `std::num::FromPrimitive` and is disabled in +Rust 1.0. + +## Documentation + +https://andersk.github.io/enum_primitive-rs/enum_primitive/ + +## Usage + +Add the following to your `Cargo.toml` file: + +``` +[dependencies] +enum_primitive = "*" +``` + +Import the crate using `#[macro_use] extern crate enum_primitive`, and +wrap your `enum` declaration inside the `enum_from_primitive!` macro. + +## Example + +```rust +#[macro_use] extern crate enum_primitive; +extern crate num; +use num::FromPrimitive; + +enum_from_primitive! { +#[derive(Debug, PartialEq)] +enum FooBar { + Foo = 17, + Bar = 42, + Baz, +} +} + +fn main() { + assert_eq!(FooBar::from_i32(17), Some(FooBar::Foo)); + assert_eq!(FooBar::from_i32(42), Some(FooBar::Bar)); + assert_eq!(FooBar::from_i32(43), Some(FooBar::Baz)); + assert_eq!(FooBar::from_i32(91), None); +} +``` diff --git a/rust/vendor/enum_primitive/src/lib.rs b/rust/vendor/enum_primitive/src/lib.rs new file mode 100644 index 0000000..975e454 --- /dev/null +++ b/rust/vendor/enum_primitive/src/lib.rs @@ -0,0 +1,196 @@ +// Copyright (c) 2015 Anders Kaseorg <andersk@mit.edu> + +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// “Software”), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: + +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +//! This crate exports a macro `enum_from_primitive!` that wraps an +//! `enum` declaration and automatically adds an implementation of +//! `num::FromPrimitive` (reexported here), to allow conversion from +//! primitive integers to the enum. It therefore provides an +//! alternative to the built-in `#[derive(FromPrimitive)]`, which +//! requires the unstable `std::num::FromPrimitive` and is disabled in +//! Rust 1.0. +//! +//! # Example +//! +//! ``` +//! #[macro_use] extern crate enum_primitive; +//! extern crate num_traits; +//! use num_traits::FromPrimitive; +//! +//! enum_from_primitive! { +//! #[derive(Debug, PartialEq)] +//! enum FooBar { +//! Foo = 17, +//! Bar = 42, +//! Baz, +//! } +//! } +//! +//! fn main() { +//! assert_eq!(FooBar::from_i32(17), Some(FooBar::Foo)); +//! assert_eq!(FooBar::from_i32(42), Some(FooBar::Bar)); +//! assert_eq!(FooBar::from_i32(43), Some(FooBar::Baz)); +//! assert_eq!(FooBar::from_i32(91), None); +//! } +//! ``` + + +extern crate num_traits; + +pub use std::option::Option; +pub use num_traits::FromPrimitive; + +/// Helper macro for internal use by `enum_from_primitive!`. +#[macro_export] +macro_rules! enum_from_primitive_impl_ty { + ($meth:ident, $ty:ty, $name:ident, $( $variant:ident )*) => { + #[allow(non_upper_case_globals, unused)] + fn $meth(n: $ty) -> $crate::Option<Self> { + $( if n == $name::$variant as $ty { + $crate::Option::Some($name::$variant) + } else )* { + $crate::Option::None + } + } + }; +} + +/// Helper macro for internal use by `enum_from_primitive!`. +#[macro_export] +#[macro_use(enum_from_primitive_impl_ty)] +macro_rules! enum_from_primitive_impl { + ($name:ident, $( $variant:ident )*) => { + impl $crate::FromPrimitive for $name { + enum_from_primitive_impl_ty! { from_i64, i64, $name, $( $variant )* } + enum_from_primitive_impl_ty! { from_u64, u64, $name, $( $variant )* } + } + }; +} + +/// Wrap this macro around an `enum` declaration to get an +/// automatically generated implementation of `num::FromPrimitive`. +#[macro_export] +#[macro_use(enum_from_primitive_impl)] +macro_rules! enum_from_primitive { + ( + $( #[$enum_attr:meta] )* + enum $name:ident { + $( $( #[$variant_attr:meta] )* $variant:ident ),+ $( = $discriminator:expr, $( $( #[$variant_two_attr:meta] )* $variant_two:ident ),+ )* + } + ) => { + $( #[$enum_attr] )* + enum $name { + $( $( #[$variant_attr] )* $variant ),+ $( = $discriminator, $( $( #[$variant_two_attr] )* $variant_two ),+ )* + } + enum_from_primitive_impl! { $name, $( $variant )+ $( $( $variant_two )+ )* } + }; + + ( + $( #[$enum_attr:meta] )* + enum $name:ident { + $( $( $( #[$variant_attr:meta] )* $variant:ident ),+ = $discriminator:expr ),* + } + ) => { + $( #[$enum_attr] )* + enum $name { + $( $( $( #[$variant_attr] )* $variant ),+ = $discriminator ),* + } + enum_from_primitive_impl! { $name, $( $( $variant )+ )* } + }; + + ( + $( #[$enum_attr:meta] )* + enum $name:ident { + $( $( #[$variant_attr:meta] )* $variant:ident ),+ $( = $discriminator:expr, $( $( #[$variant_two_attr:meta] )* $variant_two:ident ),+ )*, + } + ) => { + $( #[$enum_attr] )* + enum $name { + $( $( #[$variant_attr] )* $variant ),+ $( = $discriminator, $( $( #[$variant_two_attr] )* $variant_two ),+ )*, + } + enum_from_primitive_impl! { $name, $( $variant )+ $( $( $variant_two )+ )* } + }; + + ( + $( #[$enum_attr:meta] )* + enum $name:ident { + $( $( $( #[$variant_attr:meta] )* $variant:ident ),+ = $discriminator:expr ),+, + } + ) => { + $( #[$enum_attr] )* + enum $name { + $( $( $( #[$variant_attr] )* $variant ),+ = $discriminator ),+, + } + enum_from_primitive_impl! { $name, $( $( $variant )+ )+ } + }; + + ( + $( #[$enum_attr:meta] )* + pub enum $name:ident { + $( $( #[$variant_attr:meta] )* $variant:ident ),+ $( = $discriminator:expr, $( $( #[$variant_two_attr:meta] )* $variant_two:ident ),+ )* + } + ) => { + $( #[$enum_attr] )* + pub enum $name { + $( $( #[$variant_attr] )* $variant ),+ $( = $discriminator, $( $( #[$variant_two_attr] )* $variant_two ),+ )* + } + enum_from_primitive_impl! { $name, $( $variant )+ $( $( $variant_two )+ )* } + }; + + ( + $( #[$enum_attr:meta] )* + pub enum $name:ident { + $( $( $( #[$variant_attr:meta] )* $variant:ident ),+ = $discriminator:expr ),* + } + ) => { + $( #[$enum_attr] )* + pub enum $name { + $( $( $( #[$variant_attr] )* $variant ),+ = $discriminator ),* + } + enum_from_primitive_impl! { $name, $( $( $variant )+ )* } + }; + + ( + $( #[$enum_attr:meta] )* + pub enum $name:ident { + $( $( #[$variant_attr:meta] )* $variant:ident ),+ $( = $discriminator:expr, $( $( #[$variant_two_attr:meta] )* $variant_two:ident ),+ )*, + } + ) => { + $( #[$enum_attr] )* + pub enum $name { + $( $( #[$variant_attr] )* $variant ),+ $( = $discriminator, $( $( #[$variant_two_attr] )* $variant_two ),+ )*, + } + enum_from_primitive_impl! { $name, $( $variant )+ $( $( $variant_two )+ )* } + }; + + ( + $( #[$enum_attr:meta] )* + pub enum $name:ident { + $( $( $( #[$variant_attr:meta] )* $variant:ident ),+ = $discriminator:expr ),+, + } + ) => { + $( #[$enum_attr] )* + pub enum $name { + $( $( $( #[$variant_attr] )* $variant ),+ = $discriminator ),+, + } + enum_from_primitive_impl! { $name, $( $( $variant )+ )+ } + }; +} diff --git a/rust/vendor/enum_primitive/tests/image.rs b/rust/vendor/enum_primitive/tests/image.rs new file mode 100644 index 0000000..8a31228 --- /dev/null +++ b/rust/vendor/enum_primitive/tests/image.rs @@ -0,0 +1,109 @@ +#[macro_use] extern crate enum_primitive; + +mod gif { + enum_from_primitive! { + /// Known block types + enum Block { + Image = 0x2C, + Extension = 0x21, + Trailer = 0x3B + } + } + + enum_from_primitive! { + /// Known GIF extensions + enum Extension { + Text = 0x01, + Control = 0xF9, + Comment = 0xFE, + Application = 0xFF + } + } + + enum_from_primitive! { + /// Method to dispose the image + enum DisposalMethod { + Undefined = 0, + None = 1, + Previous = 2, + Background = 3 + } + } +} + +mod png { + enum_from_primitive! { + #[derive(Clone, Copy, Debug, PartialEq)] + enum InterlaceMethod { + None = 0, + Adam7 = 1 + } + } + + enum_from_primitive! { + #[derive(Debug)] + pub enum FilterType { + NoFilter = 0, + Sub = 1, + Up = 2, + Avg = 3, + Paeth = 4 + } + } +} + +mod tiff { + enum_from_primitive! { + #[derive(Clone, Copy, Debug, PartialEq)] + enum PhotometricInterpretation { + WhiteIsZero = 0, + BlackIsZero = 1, + RGB = 2, + RGBPalette = 3, + TransparencyMask = 4, + CMYK = 5, + YCbCr = 6, + CIELab = 8, + } + } + + enum_from_primitive! { + #[derive(Clone, Copy, Debug)] + enum CompressionMethod { + None = 1, + Huffman = 2, + Fax3 = 3, + Fax4 = 4, + LZW = 5, + JPEG = 6, + PackBits = 32773 + } + } + + enum_from_primitive! { + #[derive(Clone, Copy, Debug)] + enum PlanarConfiguration { + Chunky = 1, + Planar = 2 + } + } + + enum_from_primitive! { + #[derive(Clone, Copy, Debug)] + enum Predictor { + None = 1, + Horizontal = 2 + } + } + + enum_from_primitive! { + #[derive(Clone, Copy, Debug)] + pub enum Type { + BYTE = 1, + ASCII = 2, + SHORT = 3, + LONG = 4, + RATIONAL = 5, + } + } +} diff --git a/rust/vendor/enum_primitive/tests/omitted-discriminants.rs b/rust/vendor/enum_primitive/tests/omitted-discriminants.rs new file mode 100644 index 0000000..307faa6 --- /dev/null +++ b/rust/vendor/enum_primitive/tests/omitted-discriminants.rs @@ -0,0 +1,63 @@ +#[macro_use] extern crate enum_primitive; + +enum_from_primitive! { enum E { } } +enum_from_primitive! { enum E0 { V0 } } +enum_from_primitive! { enum E0C { V0, } } +enum_from_primitive! { enum E1 { V0 = 0 } } +enum_from_primitive! { enum E1C { V0 = 0, } } +enum_from_primitive! { enum E00 { V0, V1 } } +enum_from_primitive! { enum E00C { V0, V1, } } +enum_from_primitive! { enum E01 { V0, V1 = 1 } } +enum_from_primitive! { enum E01C { V0, V1 = 1, } } +enum_from_primitive! { enum E10 { V0 = 0, V1 } } +enum_from_primitive! { enum E10C { V0 = 0, V1, } } +enum_from_primitive! { enum E11 { V0 = 0, V1 = 1 } } +enum_from_primitive! { enum E11C { V0 = 0, V1 = 1, } } +enum_from_primitive! { enum E000 { V0, V1, V2 } } +enum_from_primitive! { enum E000C { V0, V1, V2, } } +enum_from_primitive! { enum E001 { V0, V1, V2 = 2 } } +enum_from_primitive! { enum E001C { V0, V1, V2 = 2, } } +enum_from_primitive! { enum E010 { V0, V1 = 1, V2 } } +enum_from_primitive! { enum E010C { V0, V1 = 1, V2, } } +enum_from_primitive! { enum E011 { V0, V1 = 1, V2 = 2 } } +enum_from_primitive! { enum E011C { V0, V1 = 1, V2 = 2, } } +enum_from_primitive! { enum E100 { V0 = 0, V1, V2 } } +enum_from_primitive! { enum E100C { V0 = 0, V1, V2, } } +enum_from_primitive! { enum E101 { V0 = 0, V1, V2 = 2 } } +enum_from_primitive! { enum E101C { V0 = 0, V1, V2 = 2, } } +enum_from_primitive! { enum E110 { V0 = 0, V1 = 1, V2 } } +enum_from_primitive! { enum E110C { V0 = 0, V1 = 1, V2, } } +enum_from_primitive! { enum E111 { V0 = 0, V1 = 1, V2 = 2 } } +enum_from_primitive! { enum E111C { V0 = 0, V1 = 1, V2 = 2, } } +enum_from_primitive! { enum E0000 { V0, V1, V2, V3 } } +enum_from_primitive! { enum E0000C { V0, V1, V2, V3, } } +enum_from_primitive! { enum E0001 { V0, V1, V2, V3 = 3 } } +enum_from_primitive! { enum E0001C { V0, V1, V2, V3 = 3, } } +enum_from_primitive! { enum E0010 { V0, V1, V2 = 2, V3 } } +enum_from_primitive! { enum E0010C { V0, V1, V2 = 2, V3, } } +enum_from_primitive! { enum E0011 { V0, V1, V2 = 2, V3 = 3 } } +enum_from_primitive! { enum E0011C { V0, V1, V2 = 2, V3 = 3, } } +enum_from_primitive! { enum E0100 { V0, V1 = 1, V2, V3 } } +enum_from_primitive! { enum E0100C { V0, V1 = 1, V2, V3, } } +enum_from_primitive! { enum E0101 { V0, V1 = 1, V2, V3 = 3 } } +enum_from_primitive! { enum E0101C { V0, V1 = 1, V2, V3 = 3, } } +enum_from_primitive! { enum E0110 { V0, V1 = 1, V2 = 2, V3 } } +enum_from_primitive! { enum E0110C { V0, V1 = 1, V2 = 2, V3, } } +enum_from_primitive! { enum E0111 { V0, V1 = 1, V2 = 2, V3 = 3 } } +enum_from_primitive! { enum E0111C { V0, V1 = 1, V2 = 2, V3 = 3, } } +enum_from_primitive! { enum E1000 { V0 = 0, V1, V2, V3 } } +enum_from_primitive! { enum E1000C { V0 = 0, V1, V2, V3, } } +enum_from_primitive! { enum E1001 { V0 = 0, V1, V2, V3 = 3 } } +enum_from_primitive! { enum E1001C { V0 = 0, V1, V2, V3 = 3, } } +enum_from_primitive! { enum E1010 { V0 = 0, V1, V2 = 2, V3 } } +enum_from_primitive! { enum E1010C { V0 = 0, V1, V2 = 2, V3, } } +enum_from_primitive! { enum E1011 { V0 = 0, V1, V2 = 2, V3 = 3 } } +enum_from_primitive! { enum E1011C { V0 = 0, V1, V2 = 2, V3 = 3, } } +enum_from_primitive! { enum E1100 { V0 = 0, V1 = 1, V2, V3 } } +enum_from_primitive! { enum E1100C { V0 = 0, V1 = 1, V2, V3, } } +enum_from_primitive! { enum E1101 { V0 = 0, V1 = 1, V2, V3 = 3 } } +enum_from_primitive! { enum E1101C { V0 = 0, V1 = 1, V2, V3 = 3, } } +enum_from_primitive! { enum E1110 { V0 = 0, V1 = 1, V2 = 2, V3 } } +enum_from_primitive! { enum E1110C { V0 = 0, V1 = 1, V2 = 2, V3, } } +enum_from_primitive! { enum E1111 { V0 = 0, V1 = 1, V2 = 2, V3 = 3 } } +enum_from_primitive! { enum E1111C { V0 = 0, V1 = 1, V2 = 2, V3 = 3, } } diff --git a/rust/vendor/enum_primitive/tests/tests.rs b/rust/vendor/enum_primitive/tests/tests.rs new file mode 100644 index 0000000..4cdc3b4 --- /dev/null +++ b/rust/vendor/enum_primitive/tests/tests.rs @@ -0,0 +1,235 @@ +#[macro_use] extern crate enum_primitive as ep; + +enum_from_primitive! { +enum Unused { + A = 17, + B = 42 +} +} + +enum_from_primitive! { +#[derive(Debug, PartialEq)] +enum Empty { +} +} + +#[test] +fn empty() { + use ep::FromPrimitive; + assert_eq!(Empty::from_i32(91), None); +} + +enum_from_primitive! { +#[derive(Debug, PartialEq)] +enum One { + A = 17 +} +} + +#[test] +fn one() { + use ep::FromPrimitive; + assert_eq!(One::from_isize(17), Some(One::A)); + assert_eq!(One::from_isize(91), None); + assert_eq!(One::from_i8(17), Some(One::A)); + assert_eq!(One::from_i8(91), None); + assert_eq!(One::from_i16(17), Some(One::A)); + assert_eq!(One::from_i16(91), None); + assert_eq!(One::from_i32(17), Some(One::A)); + assert_eq!(One::from_i32(91), None); + assert_eq!(One::from_i64(17), Some(One::A)); + assert_eq!(One::from_i64(91), None); + assert_eq!(One::from_usize(17), Some(One::A)); + assert_eq!(One::from_usize(91), None); + assert_eq!(One::from_u8(17), Some(One::A)); + assert_eq!(One::from_u8(91), None); + assert_eq!(One::from_u16(17), Some(One::A)); + assert_eq!(One::from_u16(91), None); + assert_eq!(One::from_u32(17), Some(One::A)); + assert_eq!(One::from_u32(91), None); + assert_eq!(One::from_u64(17), Some(One::A)); + assert_eq!(One::from_u64(91), None); +} + +enum_from_primitive! { +#[derive(Debug, PartialEq)] +enum OneComma { + A = 17, +} +} + +#[test] +fn one_comma() { + use ep::FromPrimitive; + assert_eq!(OneComma::from_i32(17), Some(OneComma::A)); + assert_eq!(OneComma::from_i32(91), None); +} + +enum_from_primitive! { +#[derive(Debug, PartialEq)] +enum Two { + A = 17, + B = 42 +} +} + +#[test] +fn two() { + use ep::FromPrimitive; + assert_eq!(PubTwo::from_i32(17), Some(PubTwo::A)); + assert_eq!(PubTwo::from_i32(42), Some(PubTwo::B)); + assert_eq!(PubTwo::from_i32(91), None); +} + +enum_from_primitive! { +#[derive(Debug, PartialEq)] +enum TwoComma { + A = 17, + B = 42, +} +} + +#[test] +fn two_comma() { + use ep::FromPrimitive; + assert_eq!(TwoComma::from_i32(17), Some(TwoComma::A)); + assert_eq!(TwoComma::from_i32(42), Some(TwoComma::B)); + assert_eq!(TwoComma::from_i32(91), None); +} + +enum_from_primitive! { +#[derive(Debug, PartialEq)] +pub enum PubEmpty { +} +} + +#[test] +fn pub_empty() { + use ep::FromPrimitive; + assert_eq!(PubEmpty::from_i32(91), None); +} + +enum_from_primitive! { +#[derive(Debug, PartialEq)] +pub enum PubOne { + A = 17 +} +} + +#[test] +fn pub_one() { + use ep::FromPrimitive; + assert_eq!(PubOne::from_i32(17), Some(PubOne::A)); + assert_eq!(PubOne::from_i32(91), None); +} + +enum_from_primitive! { +#[derive(Debug, PartialEq)] +pub enum PubOneComma { + A = 17, +} +} + +#[test] +fn pub_one_comma() { + use ep::FromPrimitive; + assert_eq!(PubOneComma::from_i32(17), Some(PubOneComma::A)); + assert_eq!(PubOneComma::from_i32(91), None); +} + +enum_from_primitive! { +#[derive(Debug, PartialEq)] +pub enum PubTwo { + A = 17, + B = 42 +} +} + +#[test] +fn pub_two() { + use ep::FromPrimitive; + assert_eq!(PubTwo::from_i32(17), Some(PubTwo::A)); + assert_eq!(PubTwo::from_i32(42), Some(PubTwo::B)); + assert_eq!(PubTwo::from_i32(91), None); +} + +enum_from_primitive! { +#[derive(Debug, PartialEq)] +pub enum PubTwoComma { + A = 17, + B = 42, +} +} + +#[test] +fn pub_two_comma() { + use ep::FromPrimitive; + assert_eq!(PubTwoComma::from_i32(17), Some(PubTwoComma::A)); + assert_eq!(PubTwoComma::from_i32(42), Some(PubTwoComma::B)); + assert_eq!(PubTwoComma::from_i32(91), None); +} + +enum_from_primitive! { +#[derive(Debug, PartialEq)] +enum Negative { + A = -17 +} +} + +#[test] +fn negative() { + use ep::FromPrimitive; + assert_eq!(Negative::from_isize(-17), Some(Negative::A)); + assert_eq!(Negative::from_isize(-91), None); + assert_eq!(Negative::from_i8(-17), Some(Negative::A)); + assert_eq!(Negative::from_i8(-91), None); + assert_eq!(Negative::from_i16(-17), Some(Negative::A)); + assert_eq!(Negative::from_i16(-91), None); + assert_eq!(Negative::from_i32(-17), Some(Negative::A)); + assert_eq!(Negative::from_i32(-91), None); + assert_eq!(Negative::from_i64(-17), Some(Negative::A)); + assert_eq!(Negative::from_i64(-91), None); + assert_eq!(Negative::from_usize(!16), Some(Negative::A)); + assert_eq!(Negative::from_usize(!90), None); + assert_eq!(Negative::from_u8(!16), None); + assert_eq!(Negative::from_u8(!90), None); + assert_eq!(Negative::from_u16(!16), None); + assert_eq!(Negative::from_u16(!90), None); + assert_eq!(Negative::from_u32(!16), None); + assert_eq!(Negative::from_u32(!90), None); + assert_eq!(Negative::from_u64(!16), Some(Negative::A)); + assert_eq!(Negative::from_u64(!90), None); +} + +#[test] +fn in_local_mod() { + mod local_mod { + enum_from_primitive! { + #[derive(Debug, PartialEq)] + pub enum InLocalMod { + A = 17, + B = 42, + } + } + } + + use ep::FromPrimitive; + assert_eq!(local_mod::InLocalMod::from_i32(17), Some(local_mod::InLocalMod::A)); + assert_eq!(local_mod::InLocalMod::from_i32(42), Some(local_mod::InLocalMod::B)); + assert_eq!(local_mod::InLocalMod::from_i32(91), None); +} + +enum_from_primitive! { +#[derive(Debug, PartialEq)] +#[doc = "Documented"] +pub enum Documented { + A = 17 +} +} + +#[test] +fn documented() { + use ep::FromPrimitive; + assert_eq!(Documented::from_i32(17), Some(Documented::A)); + assert_eq!(Documented::from_i32(91), None); +} |