use serde::{Deserialize, Serialize};
use super::items::{EnumDef, ErrorDef, FunctionDef, TypeDef};
use super::service::{HandlerContractDef, ServiceDef};
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ApiSurface {
pub crate_name: String,
pub version: String,
pub types: Vec<TypeDef>,
pub functions: Vec<FunctionDef>,
pub enums: Vec<EnumDef>,
pub errors: Vec<ErrorDef>,
#[serde(default)]
pub excluded_type_paths: std::collections::HashMap<String, String>,
#[serde(default)]
pub excluded_trait_names: std::collections::HashSet<String>,
#[serde(default)]
pub services: Vec<ServiceDef>,
#[serde(default)]
pub handler_contracts: Vec<HandlerContractDef>,
#[serde(default)]
pub unsupported_public_items: Vec<UnsupportedPublicItem>,
}
impl ApiSurface {
#[must_use]
pub fn with_deduped_functions(&self) -> Self {
let mut deduped = self.clone();
deduped.functions = crate::codegen::fn_dedup::dedup_same_name_functions(&self.functions);
deduped
}
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct UnsupportedPublicItem {
pub item_kind: String,
pub item_path: String,
pub reason: String,
pub suggested_fix: String,
}