Skip to content

Commit 578b1b3

Browse files
committed
Added first rust-fix: derive display trait
1 parent 6417556 commit 578b1b3

File tree

4 files changed

+108
-0
lines changed

4 files changed

+108
-0
lines changed

derive-display/Cargo.toml

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
[package]
2+
name = "derive-display"
3+
version = "0.1.0"
4+
edition = "2021"
5+
6+
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
7+
8+
[dependencies]
9+
parse-display = "0.6.0"

derive-display/src/derived_display.rs

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
use parse_display::{Display, FromStr};
2+
3+
#[derive(Display, FromStr, PartialEq, Debug)]
4+
#[display("{a}-{b}")]
5+
pub struct MyStruct {
6+
a: u32, b: u32,
7+
}
8+
9+
impl MyStruct {
10+
pub fn new(a: u32, b: u32) -> MyStruct { MyStruct { a, b } }
11+
}
12+
13+
#[derive(Display, FromStr, PartialEq, Debug)]
14+
#[display(style = "snake_case")]
15+
pub enum MyEnum {
16+
VarA, VarB,
17+
}

derive-display/src/main.rs

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
mod no_derive;
2+
mod derived_display;
3+
4+
fn main() {
5+
no_derive();
6+
}
7+
8+
fn no_derive() {
9+
println!("Implemented Display method");
10+
assert_eq!(no_derive::MyEnum::VarA.to_string(), "VarA");
11+
assert_eq!(no_derive::MyEnum::VarB.to_string(), "VarB");
12+
13+
let a = no_derive::MyEnum::VarA;
14+
let b = no_derive::MyEnum::VarB;
15+
println!("{}", a);
16+
println!("{}", b);
17+
18+
let s = no_derive::MyStruct::new(10,20);
19+
println!("{}", s);
20+
println!();
21+
}
22+
23+
24+
fn derive() {
25+
// cargo add parse-display-derive
26+
//https://crates.io/crates/parse-display-derive
27+
println!("Derived Display method");
28+
29+
let s = derived_display::MyStruct::new(10, 20);
30+
assert_eq!(s.to_string(), "10-20");
31+
assert_eq!("10-20".parse(), Ok(s));
32+
33+
34+
let s = derived_display::MyStruct::new(10, 20);
35+
println!("{}", s);
36+
37+
assert_eq!(derived_display::MyEnum::VarA.to_string(), "var_a");
38+
assert_eq!("var_a".parse(), Ok(derived_display::MyEnum::VarA));
39+
40+
let a = derived_display::MyEnum::VarA;
41+
let b = derived_display::MyEnum::VarB;
42+
43+
println!("{}", a);
44+
println!("{}", b);
45+
println!();
46+
}

derive-display/src/no_derive.rs

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
use std::fmt;
2+
3+
pub enum MyEnum {
4+
VarA,
5+
VarB,
6+
}
7+
8+
impl MyEnum {
9+
pub fn as_str(&self) -> &'static str {
10+
match self {
11+
MyEnum::VarA => "VarA",
12+
MyEnum::VarB => "VarB",
13+
}
14+
}
15+
}
16+
17+
impl fmt::Display for MyEnum {
18+
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
19+
write!(f, "{}", self.as_str())
20+
}
21+
}
22+
23+
pub struct MyStruct {
24+
a: u32,
25+
b: u32,
26+
}
27+
28+
impl MyStruct {
29+
pub fn new(a: u32, b: u32) -> MyStruct { MyStruct { a, b } }
30+
}
31+
32+
impl fmt::Display for MyStruct {
33+
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
34+
write!(f, "{}-{}", self.a, self.b)
35+
}
36+
}

0 commit comments

Comments
 (0)