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>,
}
#[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>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DecoratorRegistration {
pub decorator_class: String,
pub decorator_method: String,
pub function_name: String,
pub function_module: String,
pub source_file: Option<String>,
pub line_number: Option<usize>,
#[serde(default)]
pub decorator_args: toml::Table,
pub function_signature: Option<FunctionSignature>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FunctionSignature {
pub return_type: String,
#[serde(default)]
pub parameters: Vec<FunctionParameter>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FunctionParameter {
pub name: String,
pub param_type: String,
pub default: Option<String>,
#[serde(default)]
pub is_keyword_only: bool,
pub is_var_arg: Option<VarArgType>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum VarArgType {
Args,
Kwargs,
}