Skip to content

Commit

Permalink
strum1: Add AsRefStr
Browse files Browse the repository at this point in the history
  • Loading branch information
bouzuya committed Jan 6, 2023
1 parent 6f4a18b commit 6ef5161
Show file tree
Hide file tree
Showing 6 changed files with 88 additions and 8 deletions.
7 changes: 7 additions & 0 deletions strum1/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions strum1/Cargo.toml
Expand Up @@ -7,3 +7,6 @@ edition = "2021"

[dependencies]
strum = { version = "0.24.1", features = ["derive"] }

[dev-dependencies]
anyhow = "1.0.68"
5 changes: 5 additions & 0 deletions strum1/README.md
@@ -0,0 +1,5 @@
# strum

[crates:strum] の例を書く。

[crates:strum]: https://crates.io/crates/strum
27 changes: 27 additions & 0 deletions strum1/src/as_ref_str.rs
@@ -0,0 +1,27 @@
// <https://docs.rs/strum_macros/0.24.1/strum_macros/derive.AsRefStr.html>
// impl X for AsRef<str> を追加できる

#[allow(dead_code)]
#[derive(strum::AsRefStr)]
enum E1 {
A1,
#[strum(serialize = "b")]
B1,
C1(usize),
D1 {
s: String,
},
}

#[cfg(test)]
mod tests {
use super::*;

#[test]
fn e1_test() {
assert_eq!(E1::A1.as_ref(), "A1");
assert_eq!(E1::B1.as_ref(), "b");
assert_eq!(E1::C1(10).as_ref(), "C1");
assert_eq!(E1::D1 { s: "s1".to_owned() }.as_ref(), "D1");
}
}
23 changes: 23 additions & 0 deletions strum1/src/enum_count.rs
@@ -0,0 +1,23 @@
// <https://docs.rs/strum_macros/0.24.1/strum_macros/derive.EnumCount.html>
// EnumCount は COUNT を追加できる

#[allow(dead_code)]
#[derive(strum::EnumCount)]
enum E1 {
A1,
B1,
C1,
}

#[cfg(test)]
mod tests {
// これがないと E1::COUNT とできない
use strum::EnumCount;

use super::*;

#[test]
fn e1_test() {
assert_eq!(E1::COUNT, 3);
}
}
31 changes: 23 additions & 8 deletions strum1/src/main.rs
@@ -1,24 +1,39 @@
// <https://docs.rs/strum_macros/0.24.1/strum_macros/derive.EnumCount.html>
// EnumCount は COUNT を追加できる
mod as_ref_str;
mod enum_count;

#[allow(dead_code)]
#[derive(strum::EnumCount)]
#[derive(Debug, Eq, PartialEq, strum::EnumString)]
enum E1 {
A1,
#[strum(serialize = "b")]
B1,
C1,
C1(usize),
D1 {
// TODO: Default が取れない場合
s: String,
},
}

#[cfg(test)]
mod tests {
// これがないと E1::COUNT とできない
use strum::EnumCount;
use std::str::FromStr;

use super::*;

#[test]
fn e1_test() {
assert_eq!(E1::COUNT, 3);
fn e1_test() -> anyhow::Result<()> {
assert_eq!(E1::A1, E1::from_str("A1")?);
assert_eq!(E1::A1, E1::try_from("A1")?);
assert!(E1::from_str("B1").is_err());
assert_eq!(E1::B1, E1::try_from("b")?);
assert_eq!(E1::C1(0), E1::try_from("C1")?);
assert_eq!(
E1::D1 {
s: String::default()
},
E1::try_from("D1")?
);
Ok(())
}
}

Expand Down

0 comments on commit 6ef5161

Please sign in to comment.