/// WIT interface for nab WASM content-extraction providers.
///
/// A Component Model provider receives raw HTML and a URL, then returns a
/// structured article record — or an error string on failure.
///
/// Guest components implement this interface; the nab host calls `extract`
/// for each URL that matches the provider's manifest `url_patterns`.
///
/// # Example guest (Rust)
///
/// ```rust,ignore
/// wit_bindgen::generate!("provider");
///
/// struct MyProvider;
///
/// impl exports::nab::provider::extractor::Guest for MyProvider {
///     fn extract(url: String, html: String) -> Result<Article, String> {
///         Ok(Article {
///             title: Some("Page Title".to_string()),
///             content: "Extracted content".to_string(),
///             author: None,
///             date: None,
///         })
///     }
/// }
///
/// export!(MyProvider);
/// ```
package nab:provider;

interface extractor {
    /// A structured article extracted from a web page.
    record article {
        /// Page title extracted from the document.
        title: option<string>,
        /// Main body content as plain text or Markdown.
        content: string,
        /// Author name(s), if present in the document.
        author: option<string>,
        /// Publication date in ISO 8601 or human-readable form.
        date: option<string>,
    }

    /// Extract structured content from a web page.
    ///
    /// `url`  — the canonical URL of the page being processed.
    /// `html` — the full raw HTML body as a UTF-8 string.
    ///
    /// Returns `Ok(article)` on success or `Err(reason)` if the provider
    /// cannot extract useful content from this page.
    extract: func(url: string, html: string) -> result<article, string>;
}

world provider {
    export extractor;
}
