Skip to content

Commit 6cfc739

Browse files
committed
options: use &str over String where possible
I had been avoiding this as it means that we have to use some explicit lifetimes, but all-in-all using explicit lifetimes turned out not to be too bad and made the code overall a bit cleaner and easier to understand. Should see minor performance and memory usage gains from this change. Signed-off-by: Paul Osborne <[email protected]>
1 parent 20f4b58 commit 6cfc739

File tree

10 files changed

+41
-41
lines changed

10 files changed

+41
-41
lines changed

src/commands/gpio_export.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use std::process::exit;
1212
use export;
1313

1414
pub fn main(config: &GpioConfig, opts: &GpioExportOptions) {
15-
let pin = match config.get_pin(&opts.pin[..]) {
15+
let pin = match config.get_pin(opts.pin) {
1616
Some(pin) => pin,
1717
None => {
1818
println!("Unable to find config entry for pin '{}'", opts.pin);
@@ -21,7 +21,7 @@ pub fn main(config: &GpioConfig, opts: &GpioExportOptions) {
2121
};
2222

2323
let symlink_root = match opts.symlink_root {
24-
Some(ref slr) => &slr[..],
24+
Some(slr) => slr,
2525
None => config.get_symlink_root(),
2626
};
2727

src/commands/gpio_exportall.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use export;
1313

1414
pub fn main(config: &GpioConfig, opts: &GpioExportAllOptions) {
1515
let symlink_root = match opts.symlink_root {
16-
Some(ref slr) => &slr[..],
16+
Some(slr) => slr,
1717
None => config.get_symlink_root(),
1818
};
1919

src/commands/gpio_poll.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,15 @@ use std::process::exit;
1313

1414
pub fn main(config: &GpioConfig, opts: &GpioPollOptions) {
1515
let timeout = opts.timeout.unwrap_or(-1);
16-
let pin_config = match config.get_pin(&opts.pin[..]) {
16+
let pin_config = match config.get_pin(opts.pin) {
1717
Some(pin) => pin,
1818
None => {
1919
println!("Unable to find config entry for pin '{}'", opts.pin);
2020
exit(1)
2121
}
2222
};
2323
let pin = pin_config.get_pin();
24-
let edge = match &opts.edge[..] {
24+
let edge = match opts.edge {
2525
"rising" => Edge::RisingEdge,
2626
"falling" => Edge::FallingEdge,
2727
"both" => Edge::BothEdges,

src/commands/gpio_read.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use config::GpioConfig;
1111
use std::process::exit;
1212

1313
pub fn main(config: &GpioConfig, opts: &GpioReadOptions) {
14-
let pin_config = match config.get_pin(&opts.pin[..]) {
14+
let pin_config = match config.get_pin(opts.pin) {
1515
Some(pin) => pin,
1616
None => {
1717
println!("Unable to find config entry for pin '{}'", opts.pin);

src/commands/gpio_status.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ use std::process::exit;
1515
pub fn main(config: &GpioConfig, opts: &GpioStatusOptions) {
1616
match opts.pin {
1717
Some(ref pin_name) => {
18-
let pin_config = match config.get_pin(&pin_name[..]) {
18+
let pin_config = match config.get_pin(pin_name) {
1919
Some(pin) => pin,
2020
None => {
2121
println!("Unable to find config entry for pin '{}'", pin_name);

src/commands/gpio_unexport.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,13 @@ use std::process::exit;
1212
use export;
1313

1414
pub fn main(config: &GpioConfig, opts: &GpioUnexportOptions) {
15-
let pin_config = config.get_pin(&opts.pin[..]).unwrap_or_else(|| {
15+
let pin_config = config.get_pin(opts.pin).unwrap_or_else(|| {
1616
println!("Unable to find config entry for pin '{}'", opts.pin);
1717
exit(1)
1818
});
1919

2020
let symlink_root = match opts.symlink_root {
21-
Some(ref slr) => &slr[..],
21+
Some(slr) => slr,
2222
None => config.get_symlink_root(),
2323
};
2424

src/commands/gpio_unexportall.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use export;
1313

1414
pub fn main(config: &GpioConfig, opts: &GpioUnexportAllOptions) {
1515
let symlink_root = match opts.symlink_root {
16-
Some(ref slr) => &slr[..],
16+
Some(slr) => slr,
1717
None => config.get_symlink_root(),
1818
};
1919

src/commands/gpio_write.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use std::process::exit;
1212
use sysfs_gpio::Direction;
1313

1414
pub fn main(config: &GpioConfig, opts: &GpioWriteOptions) {
15-
let pin_config = match config.get_pin(&opts.pin[..]) {
15+
let pin_config = match config.get_pin(opts.pin) {
1616
Some(pin) => pin,
1717
None => {
1818
println!("Unable to find config entry for pin '{}'", opts.pin);

src/main.rs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ fn main() {
154154
("read", Some(m)) => {
155155
let read_options = GpioReadOptions {
156156
gpio_opts: gpio_options,
157-
pin: String::from(m.value_of("pin").unwrap()),
157+
pin: m.value_of("pin").unwrap(),
158158
};
159159
gpio_read::main(&cfg, &read_options);
160160
}
@@ -167,16 +167,16 @@ fn main() {
167167
});
168168
let poll_options = GpioPollOptions {
169169
gpio_opts: gpio_options,
170-
edge: String::from(m.value_of("edge").unwrap_or("both")),
170+
edge: m.value_of("edge").unwrap_or("both"),
171171
timeout: timeout,
172-
pin: String::from(m.value_of("pin").unwrap()),
172+
pin: m.value_of("pin").unwrap(),
173173
};
174174
gpio_poll::main(&cfg, &poll_options);
175175
}
176176
("write", Some(m)) => {
177177
let write_options = GpioWriteOptions {
178178
gpio_opts: gpio_options,
179-
pin: String::from(m.value_of("pin").unwrap()),
179+
pin: m.value_of("pin").unwrap(),
180180
value: match m.value_of("value").unwrap().parse::<u8>() {
181181
Ok(value) => value,
182182
Err(_) => {
@@ -191,9 +191,9 @@ fn main() {
191191
("export", Some(m)) => {
192192
let export_options = GpioExportOptions {
193193
gpio_opts: gpio_options,
194-
pin: String::from(m.value_of("pin").unwrap()),
194+
pin: m.value_of("pin").unwrap(),
195195
symlink_root: match m.value_of("symlink-root") {
196-
Some(slr) => Some(String::from(slr)),
196+
Some(slr) => Some(slr),
197197
None => None,
198198
},
199199
};
@@ -203,7 +203,7 @@ fn main() {
203203
let exportall_options = GpioExportAllOptions {
204204
gpio_opts: gpio_options,
205205
symlink_root: match m.value_of("symlink-root") {
206-
Some(slr) => Some(String::from(slr)),
206+
Some(slr) => Some(slr),
207207
None => None,
208208
},
209209
};
@@ -212,22 +212,22 @@ fn main() {
212212
("unexport", Some(m)) => {
213213
let unexport_options = GpioUnexportOptions {
214214
gpio_opts: gpio_options,
215-
pin: String::from(m.value_of("pin").unwrap()),
216-
symlink_root: m.value_of("symlink-root").map(String::from),
215+
pin: m.value_of("pin").unwrap(),
216+
symlink_root: m.value_of("symlink-root"),
217217
};
218218
gpio_unexport::main(&cfg, &unexport_options);
219219
}
220220
("unexport-all", Some(m)) => {
221221
let unexportall_options = GpioUnexportAllOptions {
222222
gpio_opts: gpio_options,
223-
symlink_root: m.value_of("symlink-root").map(String::from),
223+
symlink_root: m.value_of("symlink-root"),
224224
};
225225
gpio_unexportall::main(&cfg, &unexportall_options);
226226
}
227227
("status", Some(m)) => {
228228
let status_options = GpioStatusOptions {
229229
gpio_opts: gpio_options,
230-
pin: m.value_of("pin").map(String::from),
230+
pin: m.value_of("pin"),
231231
};
232232
gpio_status::main(&cfg, &status_options);
233233
}

src/options.rs

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -12,54 +12,54 @@ pub struct GpioOptions {
1212
}
1313

1414
#[derive(Debug)]
15-
pub struct GpioReadOptions {
15+
pub struct GpioReadOptions<'a> {
1616
pub gpio_opts: GpioOptions,
17-
pub pin: String,
17+
pub pin: &'a str,
1818
}
1919

2020
#[derive(Debug)]
21-
pub struct GpioWriteOptions {
21+
pub struct GpioWriteOptions<'a> {
2222
pub gpio_opts: GpioOptions,
23-
pub pin: String,
23+
pub pin: &'a str,
2424
pub value: u8,
2525
}
2626

2727
#[derive(Debug)]
28-
pub struct GpioPollOptions {
28+
pub struct GpioPollOptions<'a> {
2929
pub gpio_opts: GpioOptions,
3030
pub timeout: Option<isize>,
31-
pub edge: String,
32-
pub pin: String,
31+
pub edge: &'a str,
32+
pub pin: &'a str,
3333
}
3434

3535
#[derive(Debug)]
36-
pub struct GpioExportOptions {
36+
pub struct GpioExportOptions<'a> {
3737
pub gpio_opts: GpioOptions,
38-
pub symlink_root: Option<String>,
39-
pub pin: String,
38+
pub symlink_root: Option<&'a str>,
39+
pub pin: &'a str,
4040
}
4141

4242
#[derive(Debug)]
43-
pub struct GpioExportAllOptions {
43+
pub struct GpioExportAllOptions<'a> {
4444
pub gpio_opts: GpioOptions,
45-
pub symlink_root: Option<String>,
45+
pub symlink_root: Option<&'a str>,
4646
}
4747

4848
#[derive(Debug)]
49-
pub struct GpioUnexportOptions {
49+
pub struct GpioUnexportOptions<'a> {
5050
pub gpio_opts: GpioOptions,
51-
pub symlink_root: Option<String>,
52-
pub pin: String,
51+
pub symlink_root: Option<&'a str>,
52+
pub pin: &'a str,
5353
}
5454

5555
#[derive(Debug)]
56-
pub struct GpioUnexportAllOptions {
56+
pub struct GpioUnexportAllOptions<'a> {
5757
pub gpio_opts: GpioOptions,
58-
pub symlink_root: Option<String>,
58+
pub symlink_root: Option<&'a str>,
5959
}
6060

6161
#[derive(Debug)]
62-
pub struct GpioStatusOptions {
62+
pub struct GpioStatusOptions<'a> {
6363
pub gpio_opts: GpioOptions,
64-
pub pin: Option<String>,
64+
pub pin: Option<&'a str>,
6565
}

0 commit comments

Comments
 (0)