//! Dataset C ABI — synchronous wrappers over kglite's blocking
//! fetchers. One submodule per dataset; each gated behind its
//! matching Cargo feature so consumers can opt into only the
//! loaders they need.
//!
//! Each dataset's API uses kglite's existing `*_blocking`
//! companion functions, so the C side doesn't drag in tokio. The
//! pattern across datasets (validated by Sodir; SEC + Wikidata
//! mirror it) is:
//!
//! 1. Convert C inputs → Rust args (CStr → str, parse JSON
//!    arrays, etc.)
//! 2. Build the dataset's workdir / client from primitive args
//! 3. Call the existing `_blocking` entry point
//! 4. On Ok: serialize the report into a JSON string (wire format
//!    is a per-binding concern per CLAUDE.md's negative-space
//!    table — we hand-build JSON rather than adding `Serialize`
//!    derives to core report types)
//! 5. On Err: set the error message string + return a status code

#[cfg(feature = "sodir")]
pub mod sodir;

#[cfg(feature = "sec")]
pub mod sec;

#[cfg(feature = "wikidata")]
pub mod wikidata;
