mirror of
https://github.com/danog/strum.git
synced 2024-11-26 20:14:40 +01:00
Updated Version. Changed Readme
This commit is contained in:
parent
bb2a37e9b6
commit
fbea713633
42
README.md
42
README.md
@ -45,7 +45,8 @@ only dump the code generated on a type named `YourType`.
|
|||||||
Strum has implemented the following macros:
|
Strum has implemented the following macros:
|
||||||
|
|
||||||
1. `EnumString`: auto-derives `std::str::FromStr` on the enum. Each variant of the enum will match on it's
|
1. `EnumString`: auto-derives `std::str::FromStr` on the enum. Each variant of the enum will match on it's
|
||||||
own name. This can be overridden using `serialize="DifferentName"` on the attribute as shown below.
|
own name. This can be overridden using `serialize="DifferentName"` or `to_string="DifferentName"`
|
||||||
|
on the attribute as shown below.
|
||||||
Multiple deserializations can be added to the same variant. If the variant contains additional data,
|
Multiple deserializations can be added to the same variant. If the variant contains additional data,
|
||||||
they will be set to their default values upon deserialization.
|
they will be set to their default values upon deserialization.
|
||||||
|
|
||||||
@ -95,7 +96,40 @@ Strum has implemented the following macros:
|
|||||||
is potentially an expensive operation. If you do need that behavior, consider the more powerful
|
is potentially an expensive operation. If you do need that behavior, consider the more powerful
|
||||||
Serde library for your serialization.
|
Serde library for your serialization.
|
||||||
|
|
||||||
2. `EnumIter`: iterate over the variants of an Enum. Any additional data on your variants will be
|
2. `ToString`: prints out the given enum variant as a string. This enables you to perform round trip
|
||||||
|
style conversions from enum into string and back again for unit style variants. `ToString` chooses
|
||||||
|
which serialization to used based on the following criteria:
|
||||||
|
|
||||||
|
1. If there is a `to_string` property, this value will be used. There can only be one per variant.
|
||||||
|
2. Of the various `serialize` properties, the value with the longest length is chosen. If that
|
||||||
|
behavior isn't desired, you should use `to_string`.
|
||||||
|
3. The name of the variant will be used if there are no `serialize` or `to_string` attributes.
|
||||||
|
|
||||||
|
```rust
|
||||||
|
// You need to bring the type into scope to use it!!!
|
||||||
|
use std::string::ToString;
|
||||||
|
|
||||||
|
#[derive(ToString,Debug)]
|
||||||
|
enum Color {
|
||||||
|
#[strum(serialize="redred")]
|
||||||
|
Red,
|
||||||
|
Green { range:usize },
|
||||||
|
Blue(usize),
|
||||||
|
Yellow,
|
||||||
|
}
|
||||||
|
|
||||||
|
// It's simple to iterate over the variants of an enum.
|
||||||
|
fn debug_colors() {
|
||||||
|
let red = Color::Red;
|
||||||
|
assert_eq!(String::from("redred"), red.to_string());
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
debug_colors();
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
3. `EnumIter`: iterate over the variants of an Enum. Any additional data on your variants will be
|
||||||
set to `Default::default()`. The macro implements `strum::IntoEnumIter` on your enum and
|
set to `Default::default()`. The macro implements `strum::IntoEnumIter` on your enum and
|
||||||
creates a new type called `YourEnumIter` that is the iterator object. You cannot derive
|
creates a new type called `YourEnumIter` that is the iterator object. You cannot derive
|
||||||
`EnumIter` on any type with a lifetime bound (`<'a>`) because the iterator would surely
|
`EnumIter` on any type with a lifetime bound (`<'a>`) because the iterator would surely
|
||||||
@ -125,7 +159,7 @@ Strum has implemented the following macros:
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
3. `EnumMessage`: encode strings into the enum itself. This macro implements
|
4. `EnumMessage`: encode strings into the enum itself. This macro implements
|
||||||
the `strum::EnumMessage` trait. `EnumMessage` looks for
|
the `strum::EnumMessage` trait. `EnumMessage` looks for
|
||||||
`#[strum(message="...")]` attributes on your variants.
|
`#[strum(message="...")]` attributes on your variants.
|
||||||
You can also provided a `detailed_message="..."` attribute to create a
|
You can also provided a `detailed_message="..."` attribute to create a
|
||||||
@ -187,7 +221,7 @@ Strum has implemented the following macros:
|
|||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
4. `EnumProperty`: Enables the encoding of arbitary constants into enum variants. This method
|
5. `EnumProperty`: Enables the encoding of arbitary constants into enum variants. This method
|
||||||
currently only supports adding additional string values. Other types of literals are still
|
currently only supports adding additional string values. Other types of literals are still
|
||||||
experimental in the rustc compiler. The generated code works by nesting match statements.
|
experimental in the rustc compiler. The generated code works by nesting match statements.
|
||||||
The first match statement matches on the type of the enum, and the inner match statement
|
The first match statement matches on the type of the enum, and the inner match statement
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "strum"
|
name = "strum"
|
||||||
version = "0.5.1"
|
version = "0.6.0"
|
||||||
authors = ["Peter Glotfelty <peglotfe@microsoft.com>"]
|
authors = ["Peter Glotfelty <peglotfe@microsoft.com>"]
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
|
|
||||||
@ -13,7 +13,7 @@ homepage = "https://github.com/Peternator7/strum"
|
|||||||
readme = "../README.md"
|
readme = "../README.md"
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
strum_macros = "0.5.0"
|
strum_macros = "0.6.0"
|
||||||
# strum_macros = { path = "../strum_macros" }
|
# strum_macros = { path = "../strum_macros" }
|
||||||
|
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@
|
|||||||
//! Strum has implemented the following macros:
|
//! Strum has implemented the following macros:
|
||||||
//!
|
//!
|
||||||
//! 1. `EnumString`: auto-derives `std::str::FromStr` on the enum. Each variant of the enum will match on it's
|
//! 1. `EnumString`: auto-derives `std::str::FromStr` on the enum. Each variant of the enum will match on it's
|
||||||
//! own name. This can be overridden using `serialize="DifferentName"` on the attribute as shown below.
|
//! own name. This can be overridden using `serialize="DifferentName"` or `to_string="DifferentName"`on the attribute as shown below.
|
||||||
//! Multiple deserializations can be added to the same variant. If the variant contains additional data,
|
//! Multiple deserializations can be added to the same variant. If the variant contains additional data,
|
||||||
//! they will be set to their default values upon deserialization.
|
//! they will be set to their default values upon deserialization.
|
||||||
//!
|
//!
|
||||||
@ -84,7 +84,40 @@
|
|||||||
//! is potentially an expensive operation. If you do need that behavior, consider the more powerful
|
//! is potentially an expensive operation. If you do need that behavior, consider the more powerful
|
||||||
//! Serde library for your serialization.
|
//! Serde library for your serialization.
|
||||||
//!
|
//!
|
||||||
//! 2. `EnumIter`: iterate over the variants of an Enum. Any additional data on your variants will be
|
//! 2. `ToString`: prints out the given enum variant as a string. This enables you to perform round trip
|
||||||
|
//! style conversions from enum into string and back again for unit style variants. `ToString` chooses
|
||||||
|
//! which serialization to used based on the following criteria:
|
||||||
|
//!
|
||||||
|
//! 1. If there is a `to_string` property, this value will be used. There can only be one per variant.
|
||||||
|
//! 2. Of the various `serialize` properties, the value with the longest length is chosen. If that
|
||||||
|
//! behavior isn't desired, you should use `to_string`.
|
||||||
|
//! 3. The name of the variant will be used if there are no `serialize` or `to_string` attributes.
|
||||||
|
//!
|
||||||
|
//! ```rust
|
||||||
|
//! # extern crate strum;
|
||||||
|
//! # #[macro_use] extern crate strum_macros;
|
||||||
|
//! // You need to bring the type into scope to use it!!!
|
||||||
|
//! use std::string::ToString;
|
||||||
|
//!
|
||||||
|
//! #[derive(ToString, Debug)]
|
||||||
|
//! enum Color {
|
||||||
|
//! #[strum(serialize="redred")]
|
||||||
|
//! Red,
|
||||||
|
//! Green { range:usize },
|
||||||
|
//! Blue(usize),
|
||||||
|
//! Yellow,
|
||||||
|
//! }
|
||||||
|
//!
|
||||||
|
//! // It's simple to iterate over the variants of an enum.
|
||||||
|
//! fn debug_colors() {
|
||||||
|
//! let red = Color::Red;
|
||||||
|
//! assert_eq!(String::from("redred"), red.to_string());
|
||||||
|
//! }
|
||||||
|
//!
|
||||||
|
//! fn main () { debug_colors(); }
|
||||||
|
//! ```
|
||||||
|
//!
|
||||||
|
//! 3. `EnumIter`: iterate over the variants of an Enum. Any additional data on your variants will be
|
||||||
//! set to `Default::default()`. The macro implements `strum::IntoEnumIter` on your enum and
|
//! set to `Default::default()`. The macro implements `strum::IntoEnumIter` on your enum and
|
||||||
//! creates a new type called `YourEnumIter` that is the iterator object. You cannot derive
|
//! creates a new type called `YourEnumIter` that is the iterator object. You cannot derive
|
||||||
//! `EnumIter` on any type with a lifetime bound (`<'a>`) because the iterator would surely
|
//! `EnumIter` on any type with a lifetime bound (`<'a>`) because the iterator would surely
|
||||||
@ -117,7 +150,7 @@
|
|||||||
//! }
|
//! }
|
||||||
//! ```
|
//! ```
|
||||||
//!
|
//!
|
||||||
//! 3. `EnumMessage`: encode strings into the enum itself. This macro implements
|
//! 4. `EnumMessage`: encode strings into the enum itself. This macro implements
|
||||||
//! the `strum::EnumMessage` trait. `EnumMessage` looks for
|
//! the `strum::EnumMessage` trait. `EnumMessage` looks for
|
||||||
//! `#[strum(message="...")]` attributes on your variants.
|
//! `#[strum(message="...")]` attributes on your variants.
|
||||||
//! You can also provided a `detailed_message="..."` attribute to create a
|
//! You can also provided a `detailed_message="..."` attribute to create a
|
||||||
@ -181,7 +214,7 @@
|
|||||||
//! # fn main() {}
|
//! # fn main() {}
|
||||||
//! ```
|
//! ```
|
||||||
//!
|
//!
|
||||||
//! 4. `EnumProperty`: Enables the encoding of arbitary constants into enum variants. This method
|
//! 5. `EnumProperty`: Enables the encoding of arbitary constants into enum variants. This method
|
||||||
//! currently only supports adding additional string values. Other types of literals are still
|
//! currently only supports adding additional string values. Other types of literals are still
|
||||||
//! experimental in the rustc compiler. The generated code works by nesting match statements.
|
//! experimental in the rustc compiler. The generated code works by nesting match statements.
|
||||||
//! The first match statement matches on the type of the enum, and the inner match statement
|
//! The first match statement matches on the type of the enum, and the inner match statement
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "strum_macros"
|
name = "strum_macros"
|
||||||
version = "0.5.0"
|
version = "0.6.0"
|
||||||
authors = ["Peter Glotfelty <peglotfe@microsoft.com>"]
|
authors = ["Peter Glotfelty <peglotfe@microsoft.com>"]
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user