这就是我最终要做的。
使用@EvilTak 建议的宏并混入https://docs.rs/phf/0.8.0/phf/
我知道了
macro_rules! expand {
( $( ($name:expr, $start:expr, $end:expr) ),* ) => {
[ $( RegDef { name: $name, start: $start, end: $end } ),* ]
}
}
#[derive(Debug)]
struct RegDef{
name:&'static str,
start: usize,
end: usize
}
static REGDEF_MAP: phf::Map<&'static str, &[RegDef]> = phf_map!{
"rkcs" => &expand![
("err", 15, 16),
("he", 14, 15),
("scp", 13, 14),
("inhib", 11, 12),
("fmt", 10, 11),
("sse", 8, 9),
("rdy", 7, 8),
("ide", 6, 7),
("mex", 4, 6),
("func", 1, 4),
("go", 0, 1)
],
"rker" => &expand![
("dre", 15, 16),
("ovr", 14, 15),
("wlo", 13, 14),
("ske", 12, 13),
("pge", 11, 12),
("nxm", 10, 11),
("dlt", 9, 10),
("tme", 8, 9),
("nxd", 7, 8),
("nxc", 6, 7),
("nxs", 5, 6),
("cse", 1, 2),
("wce", 0, 1)
],
"rkds" => &expand![
("drid", 13, 16),
("pwr", 12, 13),
("rk05", 11, 12),
("dru", 10, 11),
("seeki", 9, 10),
("scok", 8, 9),
("rdy", 7, 8),
("ardy", 6, 7),
("wp", 5, 6),
("scsa", 4, 5),
("sc", 0, 4)
],
"rkda" => &expand![
("drv", 13, 16),
("cyl", 5,13),
("sur", 4, 5),
("sec", 0, 4)
],
};