mirror of
https://github.com/Serial-ATA/lofty-rs
synced 2024-12-13 14:12:31 +00:00
Add macro for creating simple key-based get/set methods
Signed-off-by: Serial <69764315+Serial-ATA@users.noreply.github.com>
This commit is contained in:
parent
547d5412c0
commit
3b8e08ace0
3 changed files with 36 additions and 10 deletions
2
lofty-attr/Cargo.lock
generated
2
lofty-attr/Cargo.lock
generated
|
@ -4,7 +4,7 @@ version = 3
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lofty_attr"
|
name = "lofty_attr"
|
||||||
version = "0.1.6"
|
version = "0.1.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"quote",
|
"quote",
|
||||||
"syn",
|
"syn",
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
[package]
|
[package]
|
||||||
name = "lofty_attr"
|
name = "lofty_attr"
|
||||||
version = "0.1.6"
|
version = "0.1.7"
|
||||||
authors = ["Serial <69764315+Serial-ATA@users.noreply.github.com>"]
|
authors = ["Serial <69764315+Serial-ATA@users.noreply.github.com>"]
|
||||||
description = "Macro for Lofty tag struct creation"
|
description = "Macros for Lofty tag struct creation"
|
||||||
license = "MIT OR Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
repository = "https://github.com/Serial-ATA/lofty-rs"
|
repository = "https://github.com/Serial-ATA/lofty-rs"
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
|
|
|
@ -221,8 +221,8 @@ pub fn u16_accessor(input: TokenStream) -> TokenStream {
|
||||||
ident = input_str,
|
ident = input_str,
|
||||||
display = name,
|
display = name,
|
||||||
)
|
)
|
||||||
.parse()
|
.parse()
|
||||||
.expect("Unable to parse u16 accessor:")
|
.expect("Unable to parse u16 accessor:")
|
||||||
}
|
}
|
||||||
|
|
||||||
#[proc_macro]
|
#[proc_macro]
|
||||||
|
@ -243,8 +243,8 @@ pub fn u32_accessor(input: TokenStream) -> TokenStream {
|
||||||
ident = input_str,
|
ident = input_str,
|
||||||
display = name,
|
display = name,
|
||||||
)
|
)
|
||||||
.parse()
|
.parse()
|
||||||
.expect("Unable to parse u32 accessor:")
|
.expect("Unable to parse u32 accessor:")
|
||||||
}
|
}
|
||||||
|
|
||||||
#[proc_macro]
|
#[proc_macro]
|
||||||
|
@ -265,6 +265,32 @@ pub fn i32_accessor(input: TokenStream) -> TokenStream {
|
||||||
ident = input_str,
|
ident = input_str,
|
||||||
display = name,
|
display = name,
|
||||||
)
|
)
|
||||||
.parse()
|
.parse()
|
||||||
.expect("Unable to parse i32 accessor:")
|
.expect("Unable to parse i32 accessor:")
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Used to create simple tag methods for getting/setting/removing based on a key
|
||||||
|
#[proc_macro]
|
||||||
|
pub fn get_set_methods(input: TokenStream) -> TokenStream {
|
||||||
|
let input = input.to_string();
|
||||||
|
let mut input_split = input.split(',');
|
||||||
|
|
||||||
|
let name = input_split.next().expect("No identifier provided");
|
||||||
|
let key = input_split.next().expect("No key provided");
|
||||||
|
|
||||||
|
format!(
|
||||||
|
"fn {ident}(&self) -> Option<&str> {{
|
||||||
|
self.get_value({key})
|
||||||
|
}}
|
||||||
|
fn set_{ident}(&mut self, {ident}: &str) {{
|
||||||
|
self.set_value({key}, {ident})
|
||||||
|
}}
|
||||||
|
fn remove_{ident}(&mut self) {{
|
||||||
|
self.remove_key({key})
|
||||||
|
}}",
|
||||||
|
ident = name,
|
||||||
|
key = key
|
||||||
|
)
|
||||||
|
.parse()
|
||||||
|
.expect("Unable to parse getters/setters:")
|
||||||
}
|
}
|
Loading…
Reference in a new issue