summaryrefslogtreecommitdiffstats
path: root/vendor/windows-bindgen/src/winmd/verify.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/windows-bindgen/src/winmd/verify.rs')
-rw-r--r--vendor/windows-bindgen/src/winmd/verify.rs33
1 files changed, 22 insertions, 11 deletions
diff --git a/vendor/windows-bindgen/src/winmd/verify.rs b/vendor/windows-bindgen/src/winmd/verify.rs
index f10bd6524..c376d9d19 100644
--- a/vendor/windows-bindgen/src/winmd/verify.rs
+++ b/vendor/windows-bindgen/src/winmd/verify.rs
@@ -1,31 +1,42 @@
use super::*;
-use metadata::RowReader;
-pub fn verify(reader: &metadata::Reader, filter: &metadata::Filter) -> crate::Result<()> {
- for item in reader.items(filter) {
+pub fn verify(reader: &metadata::Reader) -> crate::Result<()> {
+ let unused: Vec<&str> = reader.unused().collect();
+
+ if !unused.is_empty() {
+ let mut message = "unused filters".to_string();
+
+ for unused in unused {
+ message.push_str(&format!("\n {unused}"));
+ }
+
+ return Err(crate::Error::new(&message));
+ }
+
+ for item in reader.items() {
// TODO: cover all variants
let metadata::Item::Type(def) = item else {
continue;
};
- let generics = &metadata::type_def_generics(reader, def);
+ let generics = &metadata::type_def_generics(def);
- reader.type_def_fields(def).try_for_each(|field| not_type_ref(reader, &reader.field_type(field, Some(def))))?;
+ def.fields().try_for_each(|field| not_type_ref(&field.ty(Some(def))))?;
- reader.type_def_methods(def).try_for_each(|method| {
- let sig = reader.method_def_signature(method, generics);
- not_type_ref(reader, &sig.return_type)?;
+ def.methods().try_for_each(|method| {
+ let sig = method.signature(generics);
+ not_type_ref(&sig.return_type)?;
- sig.params.iter().try_for_each(|param| not_type_ref(reader, param))
+ sig.params.iter().try_for_each(not_type_ref)
})?;
}
Ok(())
}
-fn not_type_ref(reader: &metadata::Reader, ty: &metadata::Type) -> crate::Result<()> {
+fn not_type_ref(ty: &metadata::Type) -> crate::Result<()> {
if let metadata::Type::TypeRef(ty) = ty {
- return Err(crate::Error::new(&format!("missing type definition `{}`", reader.type_def_or_ref(*ty))));
+ return Err(crate::Error::new(&format!("missing type definition `{}`", ty)));
}
Ok(())
}