use r2x_manifest::types::SchemaFields;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone)]
pub struct EntryPointInfo {
pub name: String,
pub module: String,
pub symbol: String,
pub section: String,
}
impl EntryPointInfo {
pub fn is_class(&self) -> bool {
self.symbol.chars().next().is_some_and(|c| c.is_uppercase())
}
pub fn full_entry(&self) -> String {
format!("{}:{}", self.module, self.symbol)
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ConfigSpec {
pub module: String,
pub name: String,
#[serde(default)]
pub fields: Vec<ConfigField>,
#[serde(default, skip_serializing_if = "SchemaFields::is_empty")]
pub config_schema: SchemaFields,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ConfigField {
pub name: String,
pub types: Vec<String>,
pub default: Option<String>,
pub required: bool,
pub description: Option<String>,
}