Merge pull request #302 from xoviat/helper-macros
add "enum debug" helper macro
This commit is contained in:
commit
133a32cbbd
10
Cargo.lock
generated
10
Cargo.lock
generated
@ -614,6 +614,15 @@ dependencies = [
|
|||||||
"stm32-data-serde",
|
"stm32-data-serde",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "stm32-data-macros"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn 1.0.109",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "stm32-data-serde"
|
name = "stm32-data-serde"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
@ -635,6 +644,7 @@ dependencies = [
|
|||||||
"regex",
|
"regex",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
|
"stm32-data-macros",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -3,6 +3,7 @@ members = [
|
|||||||
"stm32-data-gen",
|
"stm32-data-gen",
|
||||||
"stm32-data-serde",
|
"stm32-data-serde",
|
||||||
"stm32-metapac-gen",
|
"stm32-metapac-gen",
|
||||||
|
"stm32-data-macros",
|
||||||
]
|
]
|
||||||
exclude = [
|
exclude = [
|
||||||
"build"
|
"build"
|
||||||
|
12
stm32-data-macros/Cargo.toml
Normal file
12
stm32-data-macros/Cargo.toml
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
[package]
|
||||||
|
name = "stm32-data-macros"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
[lib]
|
||||||
|
proc-macro = true
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
proc-macro2 = "1.0.36"
|
||||||
|
quote = "1.0.15"
|
||||||
|
syn = "1.0"
|
44
stm32-data-macros/src/lib.rs
Normal file
44
stm32-data-macros/src/lib.rs
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
use proc_macro2::TokenStream;
|
||||||
|
use quote::quote;
|
||||||
|
use syn;
|
||||||
|
use syn::Data;
|
||||||
|
|
||||||
|
#[proc_macro_derive(EnumDebug)]
|
||||||
|
pub fn enum_derive(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
|
||||||
|
let ast = syn::parse(input).unwrap();
|
||||||
|
|
||||||
|
impl_enum_derive(&ast).into()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn impl_enum_derive(ast: &syn::DeriveInput) -> TokenStream {
|
||||||
|
let name = &ast.ident;
|
||||||
|
let enumm = match &ast.data {
|
||||||
|
Data::Enum(e) => e,
|
||||||
|
_ => unreachable!(),
|
||||||
|
};
|
||||||
|
|
||||||
|
let match_variants: TokenStream = enumm
|
||||||
|
.variants
|
||||||
|
.iter()
|
||||||
|
.map(|v| {
|
||||||
|
let variant_name = &v.ident;
|
||||||
|
let variant_debug = format!("{}::{}", name, variant_name);
|
||||||
|
|
||||||
|
quote! {
|
||||||
|
#name::#variant_name => #variant_debug,
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.collect();
|
||||||
|
|
||||||
|
quote! {
|
||||||
|
#[automatically_derived]
|
||||||
|
impl ::core::fmt::Debug for #name {
|
||||||
|
fn fmt(self: &Self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
|
||||||
|
::core::fmt::Formatter::write_str(f, match self {
|
||||||
|
#match_variants
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.into()
|
||||||
|
}
|
@ -11,4 +11,4 @@ chiptool = { git = "https://github.com/embassy-rs/chiptool", rev = "0621765f915c
|
|||||||
serde = { version = "1.0.157", features = [ "derive" ] }
|
serde = { version = "1.0.157", features = [ "derive" ] }
|
||||||
serde_json = "1.0.94"
|
serde_json = "1.0.94"
|
||||||
proc-macro2 = "1.0.52"
|
proc-macro2 = "1.0.52"
|
||||||
|
stm32-data-macros = { version = "0.1.0", path = "../stm32-data-macros" }
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
|
use stm32_data_macros::EnumDebug;
|
||||||
|
|
||||||
pub mod ir {
|
pub mod ir {
|
||||||
use super::*;
|
use super::*;
|
||||||
@ -176,7 +177,7 @@ pub mod ir {
|
|||||||
pub block: String,
|
pub block: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Eq, PartialEq, Clone, Deserialize)]
|
#[derive(EnumDebug, Eq, PartialEq, Clone, Deserialize)]
|
||||||
pub enum Access {
|
pub enum Access {
|
||||||
ReadWrite,
|
ReadWrite,
|
||||||
Read,
|
Read,
|
||||||
@ -263,7 +264,7 @@ pub struct FlashSettings {
|
|||||||
pub erase_value: u8,
|
pub erase_value: u8,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Eq, PartialEq, Clone, Deserialize)]
|
#[derive(EnumDebug, Eq, PartialEq, Clone, Deserialize)]
|
||||||
pub enum MemoryRegionKind {
|
pub enum MemoryRegionKind {
|
||||||
#[serde(rename = "flash")]
|
#[serde(rename = "flash")]
|
||||||
Flash,
|
Flash,
|
||||||
|
@ -394,15 +394,10 @@ fn stringify<T: Debug>(metadata: T) -> String {
|
|||||||
|
|
||||||
metadata
|
metadata
|
||||||
.replace(": [", ": &[")
|
.replace(": [", ": &[")
|
||||||
.replace("kind: Ram", "kind: MemoryRegionKind::Ram")
|
|
||||||
.replace("kind: Flash", "kind: MemoryRegionKind::Flash")
|
|
||||||
.replace("Register(", "BlockItemInner::Register(")
|
.replace("Register(", "BlockItemInner::Register(")
|
||||||
.replace("Block(", "BlockItemInner::Block(")
|
.replace("Block(", "BlockItemInner::Block(")
|
||||||
.replace("Regular(", "Array::Regular(")
|
.replace("Regular(", "Array::Regular(")
|
||||||
.replace("Cursed(", "Array::Cursed(")
|
.replace("Cursed(", "Array::Cursed(")
|
||||||
.replace("Read,", "Access::Read,")
|
|
||||||
.replace("Write,", "Access::Write,")
|
|
||||||
.replace("ReadAccess::Write,", "Access::ReadWrite,")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn gen_opts() -> generate::Options {
|
fn gen_opts() -> generate::Options {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user