use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use crate::core::config::extras::Language;
#[derive(Debug, Clone, Default, Serialize, Deserialize, JsonSchema)]
pub struct CustomModulesConfig {
#[serde(default)]
pub python: Vec<String>,
#[serde(default)]
pub node: Vec<String>,
#[serde(default)]
pub ruby: Vec<String>,
#[serde(default)]
pub php: Vec<String>,
#[serde(default)]
pub elixir: Vec<String>,
#[serde(default)]
pub wasm: Vec<String>,
#[serde(default)]
pub ffi: Vec<String>,
#[serde(default)]
pub go: Vec<String>,
#[serde(default)]
pub java: Vec<String>,
#[serde(default)]
pub csharp: Vec<String>,
#[serde(default)]
pub r: Vec<String>,
}
impl CustomModulesConfig {
pub fn for_language(&self, lang: Language) -> &[String] {
match lang {
Language::Python => &self.python,
Language::Node => &self.node,
Language::Ruby => &self.ruby,
Language::Php => &self.php,
Language::Elixir => &self.elixir,
Language::Wasm => &self.wasm,
Language::Ffi => &self.ffi,
Language::Go => &self.go,
Language::Java => &self.java,
Language::Csharp => &self.csharp,
Language::R => &self.r,
Language::Rust => &[], Language::Kotlin
| Language::KotlinAndroid
| Language::Swift
| Language::Dart
| Language::Gleam
| Language::Zig
| Language::Jni
| Language::C => &[],
}
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, JsonSchema)]
pub struct CustomRegistration {
#[serde(default)]
pub classes: Vec<String>,
#[serde(default)]
pub functions: Vec<String>,
#[serde(default)]
pub init_calls: Vec<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, JsonSchema)]
pub struct CustomRegistrationsConfig {
#[serde(default)]
pub python: Option<CustomRegistration>,
#[serde(default)]
pub node: Option<CustomRegistration>,
#[serde(default)]
pub ruby: Option<CustomRegistration>,
#[serde(default)]
pub php: Option<CustomRegistration>,
#[serde(default)]
pub elixir: Option<CustomRegistration>,
#[serde(default)]
pub wasm: Option<CustomRegistration>,
}
impl CustomRegistrationsConfig {
pub fn for_language(&self, lang: Language) -> Option<&CustomRegistration> {
match lang {
Language::Python => self.python.as_ref(),
Language::Node => self.node.as_ref(),
Language::Ruby => self.ruby.as_ref(),
Language::Php => self.php.as_ref(),
Language::Elixir => self.elixir.as_ref(),
Language::Wasm => self.wasm.as_ref(),
_ => None,
}
}
}