diff options
Diffstat (limited to 'vendor/windows-bindgen/src/winmd/verify.rs')
-rw-r--r-- | vendor/windows-bindgen/src/winmd/verify.rs | 33 |
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(()) } |