// Copyright (c) Microsoft Corporation
// License: MIT OR Apache-2.0

//! Direct FFI bindings to IddCx APIs from the Windows Driver Kit (WDK)
//!
//! This module contains all bindings to functions, constants, methods,
//! constructors and destructors in the following headers: `iddcx/1.10/IddCx.h`. Types are not included in this module, but are available in the
//! top-level `wdk_sys` module.

#[allow(
    missing_docs,
    reason = "most items in the WDK headers have no inline documentation, so bindgen is unable to \
              generate documentation for their bindings"
)]
mod bindings {
    // The WDK IddCx C names (PFN_IDD_CX_*, EvtIddCx* fields, *TableIndex consts) are not Rust-cased;
    // bindgen emits them verbatim. Suppress the style lints for the generated surface.
    #![allow(non_camel_case_types, non_snake_case, non_upper_case_globals)]
    #[allow(
        clippy::wildcard_imports,
        reason = "the underlying c code relies on all type definitions being in scope, which \
                  results in the bindgen generated code relying on the generated types being in \
                  scope as well"
    )]
    #[allow(
        unused_imports,
        reason = "in certain versions of the WDK, there are no functions related to IddCx that can \
                  be generated by bindgen, so these types are unused"
    )]
    use crate::types::*;

    // `UINT` (= unsigned int) is referenced by IddCx/DXGI/OPM structs but wdk-sys never uses it, so it
    // is absent from crate::types. Define it here, in the same scope the generated bindings see.
    pub type UINT = ::core::ffi::c_uint;

    include!(concat!(env!("OUT_DIR"), "/iddcx.rs"));
}
#[allow(
    unused_imports,
    reason = "in certain versions of the WDK, there are no functions related to IddCx that can be \
              generated by bindgen, so the `bindings` module is empty"
)]
pub use bindings::*;
