use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, JsonSchema)]
pub struct FfiCapsuleTypeConfig {
#[serde(default = "default_ffi_capsule_into_raw_type")]
pub into_raw_type: String,
#[serde(default = "default_ffi_capsule_c_return_type")]
pub c_return_type: String,
#[serde(default)]
pub package: Option<String>,
#[serde(default)]
pub package_version: Option<String>,
}
fn default_ffi_capsule_into_raw_type() -> String {
"tree_sitter::ffi::TSLanguage".to_string()
}
fn default_ffi_capsule_c_return_type() -> String {
"TSLanguage".to_string()
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct FfiConfig {
pub prefix: Option<String>,
#[serde(default = "default_error_style")]
pub error_style: String,
pub header_name: Option<String>,
#[serde(default)]
pub lib_name: Option<String>,
#[serde(default)]
pub visitor_callbacks: bool,
#[serde(default)]
pub features: Option<Vec<String>>,
#[serde(default)]
pub extra_features: Vec<String>,
#[serde(default)]
pub serde_rename_all: Option<String>,
#[serde(default)]
pub exclude_functions: Vec<String>,
#[serde(default)]
pub exclude_types: Vec<String>,
#[serde(default)]
pub capsule_types: HashMap<String, FfiCapsuleTypeConfig>,
#[serde(default)]
pub rename_fields: HashMap<String, String>,
#[serde(default)]
pub plugin_error_constructor: Option<String>,
#[serde(default)]
pub target_dep_overrides: Vec<FfiTargetDepOverride>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct FfiTargetDepOverride {
pub cfg: String,
#[serde(default)]
pub features: Vec<String>,
}
fn default_error_style() -> String {
"last_error".to_string()
}