//! Rust and cargo specific annotations used to interoperate with external tools.

use std::path::PathBuf;

use indexmap::IndexMap;

use crate::package::{Abi, Bindings};

/// The annotation used by `cargo wapm` when it parses the
/// `[package.metadata.wapm]` table in your `Cargo.toml`.
#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
#[serde(rename_all = "kebab-case")]
pub struct CargoWasmerPackageAnnotation {
    /// The namespace this package should be published under.
    pub namespace: String,
    /// The name the package should be published under, if it differs from the
    /// crate name.
    pub package: Option<String>,
    /// Extra flags that should be passed to the `wasmer` CLI.
    pub wasmer_extra_flags: Option<String>,
    /// The ABI to use when adding the compiled crate to the package.
    pub abi: Abi,
    /// Filesystem mappings.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub fs: Option<IndexMap<String, PathBuf>>,
    /// Binding declarations for the crate.
    pub bindings: Option<Bindings>,
}
