use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct SymbolRule {
pub pattern: String,
pub kind: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct LanguagePack {
pub name: String,
#[serde(default)]
pub aliases: Vec<String>,
pub extensions: Vec<String>,
#[serde(default)]
pub entry_points: Vec<String>,
pub symbols: Vec<SymbolRule>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct ApiSurfaceConfig {
#[serde(default)]
pub language_packs: Vec<LanguagePack>,
#[serde(default)]
pub max_block_chars: Option<usize>,
#[serde(default = "default_api_surface_floor_chars")]
pub floor_chars: usize,
#[serde(default = "default_api_surface_pct_of_budget")]
pub pct_of_budget: usize,
#[serde(default = "default_api_surface_ceiling_chars")]
pub ceiling_chars: usize,
#[serde(default = "default_api_surface_max_symbols_per_file")]
pub max_symbols_per_file: usize,
}
impl Default for ApiSurfaceConfig {
fn default() -> Self {
Self {
language_packs: Vec::new(),
max_block_chars: None,
floor_chars: default_api_surface_floor_chars(),
pct_of_budget: default_api_surface_pct_of_budget(),
ceiling_chars: default_api_surface_ceiling_chars(),
max_symbols_per_file: default_api_surface_max_symbols_per_file(),
}
}
}
fn default_api_surface_floor_chars() -> usize {
2_000
}
fn default_api_surface_pct_of_budget() -> usize {
5
}
fn default_api_surface_ceiling_chars() -> usize {
24_000
}
fn default_api_surface_max_symbols_per_file() -> usize {
12
}