Skip to content

Commit 2669746

Browse files
bors[bot]burrbull
andauthored
Merge #606
606: derive_more r=Emilgardis a=burrbull Co-authored-by: Andrey Zgarbul <zgarbul.andrey@gmail.com>
2 parents 38fa256 + 657459e commit 2669746

File tree

6 files changed

+84
-61
lines changed

6 files changed

+84
-61
lines changed

.github/workflows/ci.yml

Lines changed: 10 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -41,34 +41,9 @@ jobs:
4141
command: check
4242
args: --target ${{ matrix.TARGET }}
4343

44-
prebuild:
45-
name: Prebuild
46-
runs-on: ubuntu-latest
47-
strategy:
48-
matrix:
49-
rust: [stable, nightly, 1.51.0]
50-
51-
steps:
52-
- uses: actions/checkout@v3
53-
54-
- uses: actions-rs/toolchain@v1
55-
with:
56-
profile: minimal
57-
toolchain: ${{ matrix.rust }}
58-
override: true
59-
60-
- name: Cache
61-
uses: Swatinem/rust-cache@v1
62-
with:
63-
sharedKey: prebuilded-${{ matrix.rust }}
64-
65-
- name: Self install
66-
run: |
67-
cargo install svd2rust --path .
68-
6944
ci-linux:
7045
runs-on: ubuntu-latest
71-
needs: [check, prebuild]
46+
needs: [check]
7247
strategy:
7348
matrix:
7449
# All generated code should be running on stable now
@@ -116,8 +91,10 @@ jobs:
11691

11792
- name: Cache
11893
uses: Swatinem/rust-cache@v1
119-
with:
120-
sharedKey: prebuilded-${{ matrix.rust }}
94+
95+
- name: Self install
96+
run: |
97+
cargo install svd2rust --path .
12198
12299
- name: Run CI script for `${{ matrix.vendor }}` under rust `${{ matrix.rust }}` with options=`${{ matrix.options }}`
123100
env:
@@ -128,7 +105,7 @@ jobs:
128105

129106
ci-clippy:
130107
runs-on: ubuntu-latest
131-
needs: [check, prebuild]
108+
needs: [check]
132109
steps:
133110
- uses: actions/checkout@v3
134111

@@ -140,8 +117,10 @@ jobs:
140117

141118
- name: Cache
142119
uses: Swatinem/rust-cache@v1
143-
with:
144-
sharedKey: prebuilded-stable
120+
121+
- name: Self install
122+
run: |
123+
cargo install svd2rust --path .
145124
146125
- name: Run CI script
147126
env:

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
1212
- Disable two clippy warnings in `array_proxy.rs`
1313
- Add comments in docs about `readAction`
1414
- Add CI to build and release binaries
15+
- Optional use `derive_more::{Deref,From}` for register reader & writer
16+
- Don't use prebuilt strategy in CI
1517

1618
## [v0.23.1] - 2022-04-29
1719

ci/script.sh

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ test_svd() {
99

1010
# NOTE we care about errors in svd2rust, but not about errors / warnings in rustfmt
1111
pushd $td
12-
RUST_BACKTRACE=1 svd2rust $strict $const_generic -i ${1}.svd
12+
RUST_BACKTRACE=1 svd2rust $strict $const_generic $derive_more -i ${1}.svd
1313

1414
mv lib.rs src/lib.rs
1515

@@ -43,18 +43,27 @@ main() {
4343
all)
4444
const_generic="--const_generic"
4545
strict="--strict"
46+
derive_more="--derive_more"
4647
;;
4748
strict)
4849
const_generic=""
4950
strict="--strict"
51+
derive_more=""
5052
;;
5153
const)
5254
const_generic="--const_generic"
5355
strict=""
56+
derive_more=""
57+
;;
58+
derive_more)
59+
const_generic=""
60+
strict=""
61+
derive_more="--derive_more"
5462
;;
5563
*)
5664
const_generic=""
5765
strict=""
66+
derive_more=""
5867
;;
5968
esac
6069

@@ -63,6 +72,9 @@ main() {
6372
echo 'cortex-m = "0.7.4"' >> $td/Cargo.toml
6473
echo 'cortex-m-rt = "0.7.1"' >> $td/Cargo.toml
6574
echo 'vcell = "0.1.3"' >> $td/Cargo.toml
75+
if [ $derive_more ]; then
76+
echo 'derive_more = "0.99"' >> $td/Cargo.toml
77+
fi
6678
echo '[profile.dev]' >> $td/Cargo.toml
6779
echo 'incremental = false' >> $td/Cargo.toml
6880

src/generate/register.rs

Lines changed: 49 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -58,58 +58,78 @@ pub fn render(
5858

5959
if can_read {
6060
let desc = format!("Register `{}` reader", register.name);
61+
let derive = if config.derive_more {
62+
Some(quote! { #[derive(derive_more::Deref, derive_more::From)] })
63+
} else {
64+
None
65+
};
6166
mod_items.extend(quote! {
6267
#[doc = #desc]
68+
#derive
6369
pub struct R(crate::R<#name_uc_spec>);
70+
});
6471

65-
impl core::ops::Deref for R {
66-
type Target = crate::R<#name_uc_spec>;
72+
if !config.derive_more {
73+
mod_items.extend(quote! {
74+
impl core::ops::Deref for R {
75+
type Target = crate::R<#name_uc_spec>;
6776

68-
#[inline(always)]
69-
fn deref(&self) -> &Self::Target {
70-
&self.0
77+
#[inline(always)]
78+
fn deref(&self) -> &Self::Target {
79+
&self.0
80+
}
7181
}
72-
}
7382

74-
impl From<crate::R<#name_uc_spec>> for R {
75-
#[inline(always)]
76-
fn from(reader: crate::R<#name_uc_spec>) -> Self {
77-
R(reader)
83+
impl From<crate::R<#name_uc_spec>> for R {
84+
#[inline(always)]
85+
fn from(reader: crate::R<#name_uc_spec>) -> Self {
86+
R(reader)
87+
}
7888
}
79-
}
80-
});
89+
});
90+
}
8191
methods.push("read");
8292
}
8393

8494
if can_write {
8595
let desc = format!("Register `{}` writer", register.name);
96+
let derive = if config.derive_more {
97+
Some(quote! { #[derive(derive_more::Deref, derive_more::DerefMut, derive_more::From)] })
98+
} else {
99+
None
100+
};
86101
mod_items.extend(quote! {
87102
#[doc = #desc]
103+
#derive
88104
pub struct W(crate::W<#name_uc_spec>);
105+
});
89106

90-
impl core::ops::Deref for W {
91-
type Target = crate::W<#name_uc_spec>;
107+
if !config.derive_more {
108+
mod_items.extend(quote! {
109+
impl core::ops::Deref for W {
110+
type Target = crate::W<#name_uc_spec>;
92111

93-
#[inline(always)]
94-
fn deref(&self) -> &Self::Target {
95-
&self.0
112+
#[inline(always)]
113+
fn deref(&self) -> &Self::Target {
114+
&self.0
115+
}
96116
}
97-
}
98117

99-
impl core::ops::DerefMut for W {
100-
#[inline(always)]
101-
fn deref_mut(&mut self) -> &mut Self::Target {
102-
&mut self.0
118+
impl core::ops::DerefMut for W {
119+
#[inline(always)]
120+
fn deref_mut(&mut self) -> &mut Self::Target {
121+
&mut self.0
122+
}
103123
}
104-
}
105124

106-
impl From<crate::W<#name_uc_spec>> for W {
107-
#[inline(always)]
108-
fn from(writer: crate::W<#name_uc_spec>) -> Self {
109-
W(writer)
125+
impl From<crate::W<#name_uc_spec>> for W {
126+
#[inline(always)]
127+
fn from(writer: crate::W<#name_uc_spec>) -> Self {
128+
W(writer)
129+
}
110130
}
111-
}
112-
});
131+
});
132+
}
113133
methods.push("write_with_zero");
114134
if can_reset {
115135
methods.push("reset");

src/main.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,11 @@ fn run() -> Result<()> {
9292
.long("pascal_enum_values")
9393
.help("Use PascalCase in stead of UPPER_CASE for enumerated values"),
9494
)
95+
.arg(
96+
Arg::with_name("derive_more")
97+
.long("derive_more")
98+
.help("Use derive_more procedural macros to implement Deref and From"),
99+
)
95100
.arg(
96101
Arg::with_name("source_type")
97102
.long("source_type")
@@ -162,6 +167,8 @@ fn run() -> Result<()> {
162167
let strict = cfg.bool_flag("strict", Filter::Arg) || cfg.bool_flag("strict", Filter::Conf);
163168
let pascal_enum_values = cfg.bool_flag("pascal_enum_values", Filter::Arg)
164169
|| cfg.bool_flag("pascal_enum_values", Filter::Conf);
170+
let derive_more =
171+
cfg.bool_flag("derive_more", Filter::Arg) || cfg.bool_flag("derive_more", Filter::Conf);
165172

166173
let mut source_type = cfg
167174
.grab()
@@ -185,6 +192,7 @@ fn run() -> Result<()> {
185192
keep_list,
186193
strict,
187194
pascal_enum_values,
195+
derive_more,
188196
output_dir: path.clone(),
189197
source_type,
190198
};

src/util.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ pub struct Config {
2929
pub keep_list: bool,
3030
pub strict: bool,
3131
pub pascal_enum_values: bool,
32+
pub derive_more: bool,
3233
pub output_dir: PathBuf,
3334
pub source_type: SourceType,
3435
}
@@ -45,6 +46,7 @@ impl Default for Config {
4546
keep_list: false,
4647
strict: false,
4748
pascal_enum_values: false,
49+
derive_more: false,
4850
output_dir: PathBuf::from("."),
4951
source_type: SourceType::default(),
5052
}

0 commit comments

Comments
 (0)