Skip to content

Commit eb9ab30

Browse files
authored
refactor: create macros.rs for general macros (#106)
1 parent 1fa85d8 commit eb9ab30

File tree

2 files changed

+106
-104
lines changed

2 files changed

+106
-104
lines changed

src/lib.rs

Lines changed: 3 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -60,114 +60,13 @@
6060
)]
6161
#![allow(clippy::missing_panics_doc)]
6262

63-
macro_rules! impl_debug_from_methods {
64-
($name:ident {
65-
$($method:ident),*$(,)?
66-
}) => {
67-
impl core::fmt::Debug for $name {
68-
fn fmt(&self, f:&mut core::fmt::Formatter<'_>) -> core::fmt::Result{
69-
f.debug_struct(core::stringify!($name))
70-
$(.field(core::stringify!($method), &self.$method()))*
71-
.finish()
72-
}
73-
}
74-
};
75-
}
76-
77-
macro_rules! bit_getter {
78-
($bit:literal,$method:ident,$name:literal) => {
79-
#[doc = "Returns the"]
80-
#[doc = $name]
81-
#[doc = "bit."]
82-
#[must_use]
83-
pub fn $method(self) -> bool {
84-
use bit_field::BitField;
85-
self.0.get_bit($bit)
86-
}
87-
};
88-
}
89-
90-
macro_rules! bit_modifier {
91-
($bit:literal,$method:ident,$name:literal) => {
92-
paste::paste! {
93-
#[doc = "Sets the"]
94-
#[doc = $name]
95-
#[doc = "bit."]
96-
pub fn [<set_ $method>](&mut self){
97-
use bit_field::BitField;
98-
self.0.set_bit($bit,true);
99-
}
100-
101-
#[doc = "Clears the"]
102-
#[doc = $name]
103-
#[doc = "bit."]
104-
pub fn [<clear_ $method>](&mut self){
105-
use bit_field::BitField;
106-
self.0.set_bit($bit,false);
107-
}
108-
}
109-
};
110-
}
111-
112-
macro_rules! ro_bit {
113-
($bit:literal,$method:ident,$name:literal) => {
114-
bit_getter!($bit, $method, $name);
115-
};
116-
}
117-
118-
macro_rules! wo_bit {
119-
($bit:literal,$method:ident,$name:literal) => {
120-
bit_modifier!($bit, $method, $name);
121-
};
122-
}
123-
124-
macro_rules! rw_bit {
125-
($bit:literal,$method:ident,$name:literal) => {
126-
bit_getter!($bit, $method, $name);
127-
bit_modifier!($bit, $method, $name);
128-
};
129-
}
130-
131-
macro_rules! rw1c_bit {
132-
($bit:literal,$method:ident,$name:literal) => {
133-
bit_getter!($bit, $method, $name);
134-
paste::paste! {
135-
#[doc = "Clears the"]
136-
#[doc = $name]
137-
#[doc = "bit."]
138-
pub fn [<clear_ $method>](&mut self){
139-
use bit_field::BitField;
140-
self.0.set_bit($bit,true);
141-
}
142-
}
143-
};
144-
}
145-
146-
macro_rules! w1s_bit {
147-
($bit:literal,$method:ident,$name:literal) => {
148-
paste::paste! {
149-
#[doc = "Sets the"]
150-
#[doc = $name]
151-
#[doc = "bit."]
152-
pub fn [<set_ $method>](&mut self){
153-
use bit_field::BitField;
154-
self.0.set_bit($bit,true);
155-
}
156-
}
157-
};
158-
}
159-
160-
macro_rules! rw1s_bit {
161-
($bit:literal,$method:ident,$name:literal) => {
162-
bit_getter!($bit, $method, $name);
163-
w1s_bit!($bit, $method, $name);
164-
};
165-
}
166-
16763
pub use accessor;
16864
pub use extended_capabilities::ExtendedCapability;
16965
pub use registers::Registers;
17066

67+
#[macro_use]
68+
mod macros;
69+
17170
pub mod context;
17271
pub mod extended_capabilities;
17372
pub mod registers;

src/macros.rs

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
macro_rules! impl_debug_from_methods {
2+
($name:ident {
3+
$($method:ident),*$(,)?
4+
}) => {
5+
impl core::fmt::Debug for $name {
6+
fn fmt(&self, f:&mut core::fmt::Formatter<'_>) -> core::fmt::Result{
7+
f.debug_struct(core::stringify!($name))
8+
$(.field(core::stringify!($method), &self.$method()))*
9+
.finish()
10+
}
11+
}
12+
};
13+
}
14+
15+
macro_rules! bit_getter {
16+
($bit:literal,$method:ident,$name:literal) => {
17+
#[doc = "Returns the"]
18+
#[doc = $name]
19+
#[doc = "bit."]
20+
#[must_use]
21+
pub fn $method(self) -> bool {
22+
use bit_field::BitField;
23+
self.0.get_bit($bit)
24+
}
25+
};
26+
}
27+
28+
macro_rules! bit_modifier {
29+
($bit:literal,$method:ident,$name:literal) => {
30+
paste::paste! {
31+
#[doc = "Sets the"]
32+
#[doc = $name]
33+
#[doc = "bit."]
34+
pub fn [<set_ $method>](&mut self){
35+
use bit_field::BitField;
36+
self.0.set_bit($bit,true);
37+
}
38+
39+
#[doc = "Clears the"]
40+
#[doc = $name]
41+
#[doc = "bit."]
42+
pub fn [<clear_ $method>](&mut self){
43+
use bit_field::BitField;
44+
self.0.set_bit($bit,false);
45+
}
46+
}
47+
};
48+
}
49+
50+
macro_rules! ro_bit {
51+
($bit:literal,$method:ident,$name:literal) => {
52+
bit_getter!($bit, $method, $name);
53+
};
54+
}
55+
56+
macro_rules! wo_bit {
57+
($bit:literal,$method:ident,$name:literal) => {
58+
bit_modifier!($bit, $method, $name);
59+
};
60+
}
61+
62+
macro_rules! rw_bit {
63+
($bit:literal,$method:ident,$name:literal) => {
64+
bit_getter!($bit, $method, $name);
65+
bit_modifier!($bit, $method, $name);
66+
};
67+
}
68+
69+
macro_rules! rw1c_bit {
70+
($bit:literal,$method:ident,$name:literal) => {
71+
bit_getter!($bit, $method, $name);
72+
paste::paste! {
73+
#[doc = "Clears the"]
74+
#[doc = $name]
75+
#[doc = "bit."]
76+
pub fn [<clear_ $method>](&mut self){
77+
use bit_field::BitField;
78+
self.0.set_bit($bit,true);
79+
}
80+
}
81+
};
82+
}
83+
84+
macro_rules! w1s_bit {
85+
($bit:literal,$method:ident,$name:literal) => {
86+
paste::paste! {
87+
#[doc = "Sets the"]
88+
#[doc = $name]
89+
#[doc = "bit."]
90+
pub fn [<set_ $method>](&mut self){
91+
use bit_field::BitField;
92+
self.0.set_bit($bit,true);
93+
}
94+
}
95+
};
96+
}
97+
98+
macro_rules! rw1s_bit {
99+
($bit:literal,$method:ident,$name:literal) => {
100+
bit_getter!($bit, $method, $name);
101+
w1s_bit!($bit, $method, $name);
102+
};
103+
}

0 commit comments

Comments
 (0)