Skip to content

Commit 1a9edaa

Browse files
authored
Consolidate value parsing for constants and enums in windows-rdl (#3885)
1 parent ab01522 commit 1a9edaa

3 files changed

Lines changed: 18 additions & 31 deletions

File tree

crates/libs/rdl/src/reader/enum.rs

Lines changed: 1 addition & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -65,37 +65,7 @@ pub fn encode_enum(encoder: &mut Encoder, item: &syntax::Enum) -> Result<(), Err
6565
return encoder.err(variant, "variant value not found");
6666
};
6767

68-
let syn::Expr::Lit(value) = value else {
69-
return encoder.err(variant, "variant value not literal");
70-
};
71-
72-
let syn::Lit::Int(value) = &value.lit else {
73-
return encoder.err(variant, "variant value not integer");
74-
};
75-
76-
let value = match ty {
77-
metadata::Type::U32 => metadata::Value::U32(
78-
value
79-
.base10_parse::<u32>()
80-
.map_err(|_| encoder.error(variant, "variant value not valid"))?,
81-
),
82-
metadata::Type::U64 => metadata::Value::U64(
83-
value
84-
.base10_parse::<u64>()
85-
.map_err(|_| encoder.error(variant, "variant value not valid"))?,
86-
),
87-
metadata::Type::I32 => metadata::Value::I32(
88-
value
89-
.base10_parse::<i32>()
90-
.map_err(|_| encoder.error(variant, "variant value not valid"))?,
91-
),
92-
metadata::Type::I64 => metadata::Value::I64(
93-
value
94-
.base10_parse::<i64>()
95-
.map_err(|_| encoder.error(variant, "variant value not valid"))?,
96-
),
97-
rest => todo!("{rest:?}"),
98-
};
68+
let value = encode_value(encoder, &ty, value)?;
9969

10070
encoder
10171
.output
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
#[win32]
2+
mod Test {
3+
const U8: u8 = -1;
4+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
use windows_rdl::*;
2+
3+
#[test]
4+
#[should_panic(
5+
expected = r#"{ message: "value not valid", file_name: "tests/const-wrong-type.rdl", line: 3, column: 19 }"#
6+
)]
7+
pub fn parse() {
8+
Reader::new()
9+
.input("tests/const-wrong-type.rdl")
10+
.output("tests/const-wrong-type.winmd")
11+
.write()
12+
.unwrap();
13+
}

0 commit comments

Comments
 (0)