1use serde::{Deserialize, Serialize};
2use std::collections::HashMap;
3use std::path::PathBuf;
4
5use super::extras::Language;
6
7#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct PythonConfig {
9 pub module_name: Option<String>,
10 pub async_runtime: Option<String>,
11 pub stubs: Option<StubsConfig>,
12 #[serde(default)]
16 pub pip_name: Option<String>,
17 #[serde(default)]
20 pub features: Option<Vec<String>>,
21 #[serde(default)]
24 pub serde_rename_all: Option<String>,
25 #[serde(default)]
29 pub capsule_types: HashMap<String, String>,
30 #[serde(default)]
33 pub release_gil: bool,
34 #[serde(default)]
36 pub exclude_functions: Vec<String>,
37 #[serde(default)]
39 pub exclude_types: Vec<String>,
40 #[serde(default)]
42 pub extra_dependencies: HashMap<String, toml::Value>,
43 #[serde(default)]
45 pub scaffold_output: Option<PathBuf>,
46}
47
48#[derive(Debug, Clone, Serialize, Deserialize)]
49pub struct StubsConfig {
50 pub output: PathBuf,
51}
52
53#[derive(Debug, Clone, Serialize, Deserialize)]
54pub struct NodeConfig {
55 pub package_name: Option<String>,
56 #[serde(default)]
59 pub features: Option<Vec<String>>,
60 #[serde(default)]
63 pub serde_rename_all: Option<String>,
64 #[serde(default)]
67 pub type_prefix: Option<String>,
68 #[serde(default)]
70 pub exclude_functions: Vec<String>,
71 #[serde(default)]
73 pub exclude_types: Vec<String>,
74 #[serde(default)]
76 pub extra_dependencies: HashMap<String, toml::Value>,
77 #[serde(default)]
79 pub scaffold_output: Option<PathBuf>,
80}
81
82#[derive(Debug, Clone, Serialize, Deserialize)]
83pub struct RubyConfig {
84 pub gem_name: Option<String>,
85 pub stubs: Option<StubsConfig>,
86 #[serde(default)]
89 pub features: Option<Vec<String>>,
90 #[serde(default)]
93 pub serde_rename_all: Option<String>,
94 #[serde(default)]
96 pub extra_dependencies: HashMap<String, toml::Value>,
97 #[serde(default)]
99 pub scaffold_output: Option<PathBuf>,
100}
101
102#[derive(Debug, Clone, Serialize, Deserialize)]
103pub struct PhpConfig {
104 pub extension_name: Option<String>,
105 #[serde(default)]
108 pub feature_gate: Option<String>,
109 #[serde(default)]
111 pub stubs: Option<StubsConfig>,
112 #[serde(default)]
113 pub features: Option<Vec<String>>,
114 #[serde(default)]
117 pub serde_rename_all: Option<String>,
118 #[serde(default)]
120 pub exclude_functions: Vec<String>,
121 #[serde(default)]
123 pub exclude_types: Vec<String>,
124 #[serde(default)]
126 pub extra_dependencies: HashMap<String, toml::Value>,
127 #[serde(default)]
129 pub scaffold_output: Option<PathBuf>,
130}
131
132#[derive(Debug, Clone, Serialize, Deserialize)]
133pub struct ElixirConfig {
134 pub app_name: Option<String>,
135 #[serde(default)]
136 pub features: Option<Vec<String>>,
137 #[serde(default)]
140 pub serde_rename_all: Option<String>,
141 #[serde(default)]
143 pub exclude_functions: Vec<String>,
144 #[serde(default)]
146 pub exclude_types: Vec<String>,
147 #[serde(default)]
149 pub extra_dependencies: HashMap<String, toml::Value>,
150 #[serde(default)]
152 pub scaffold_output: Option<PathBuf>,
153}
154
155#[derive(Debug, Clone, Serialize, Deserialize)]
156pub struct WasmConfig {
157 #[serde(default)]
158 pub exclude_functions: Vec<String>,
159 #[serde(default)]
160 pub exclude_types: Vec<String>,
161 #[serde(default)]
162 pub type_overrides: HashMap<String, String>,
163 #[serde(default)]
164 pub features: Option<Vec<String>>,
165 #[serde(default)]
168 pub serde_rename_all: Option<String>,
169 #[serde(default)]
172 pub type_prefix: Option<String>,
173 #[serde(default)]
176 pub exclude_reexports: Vec<String>,
177 #[serde(default)]
179 pub env_shims: Vec<String>,
180 #[serde(default)]
182 pub extra_dependencies: HashMap<String, toml::Value>,
183}
184
185#[derive(Debug, Clone, Serialize, Deserialize)]
186pub struct FfiConfig {
187 pub prefix: Option<String>,
188 #[serde(default = "default_error_style")]
189 pub error_style: String,
190 pub header_name: Option<String>,
191 #[serde(default)]
194 pub lib_name: Option<String>,
195 #[serde(default)]
197 pub visitor_callbacks: bool,
198 #[serde(default)]
199 pub features: Option<Vec<String>>,
200 #[serde(default)]
203 pub serde_rename_all: Option<String>,
204 #[serde(default)]
206 pub exclude_functions: Vec<String>,
207 #[serde(default)]
209 pub exclude_types: Vec<String>,
210}
211
212fn default_error_style() -> String {
213 "last_error".to_string()
214}
215
216#[derive(Debug, Clone, Serialize, Deserialize)]
217pub struct GoConfig {
218 pub module: Option<String>,
219 pub package_name: Option<String>,
221 #[serde(default)]
222 pub features: Option<Vec<String>>,
223 #[serde(default)]
226 pub serde_rename_all: Option<String>,
227}
228
229#[derive(Debug, Clone, Serialize, Deserialize)]
230pub struct JavaConfig {
231 pub package: Option<String>,
232 #[serde(default = "default_java_ffi_style")]
233 pub ffi_style: String,
234 #[serde(default)]
235 pub features: Option<Vec<String>>,
236 #[serde(default)]
239 pub serde_rename_all: Option<String>,
240}
241
242fn default_java_ffi_style() -> String {
243 "panama".to_string()
244}
245
246#[derive(Debug, Clone, Serialize, Deserialize)]
247pub struct CSharpConfig {
248 pub namespace: Option<String>,
249 pub target_framework: Option<String>,
250 #[serde(default)]
251 pub features: Option<Vec<String>>,
252 #[serde(default)]
255 pub serde_rename_all: Option<String>,
256}
257
258#[derive(Debug, Clone, Serialize, Deserialize)]
259pub struct RConfig {
260 pub package_name: Option<String>,
261 #[serde(default)]
262 pub features: Option<Vec<String>>,
263 #[serde(default)]
266 pub serde_rename_all: Option<String>,
267}
268
269#[derive(Debug, Clone, Default, Serialize, Deserialize)]
272pub struct CustomModulesConfig {
273 #[serde(default)]
274 pub python: Vec<String>,
275 #[serde(default)]
276 pub node: Vec<String>,
277 #[serde(default)]
278 pub ruby: Vec<String>,
279 #[serde(default)]
280 pub php: Vec<String>,
281 #[serde(default)]
282 pub elixir: Vec<String>,
283 #[serde(default)]
284 pub wasm: Vec<String>,
285 #[serde(default)]
286 pub ffi: Vec<String>,
287 #[serde(default)]
288 pub go: Vec<String>,
289 #[serde(default)]
290 pub java: Vec<String>,
291 #[serde(default)]
292 pub csharp: Vec<String>,
293 #[serde(default)]
294 pub r: Vec<String>,
295}
296
297impl CustomModulesConfig {
298 pub fn for_language(&self, lang: Language) -> &[String] {
299 match lang {
300 Language::Python => &self.python,
301 Language::Node => &self.node,
302 Language::Ruby => &self.ruby,
303 Language::Php => &self.php,
304 Language::Elixir => &self.elixir,
305 Language::Wasm => &self.wasm,
306 Language::Ffi => &self.ffi,
307 Language::Go => &self.go,
308 Language::Java => &self.java,
309 Language::Csharp => &self.csharp,
310 Language::R => &self.r,
311 Language::Rust => &[], }
313 }
314}
315
316#[derive(Debug, Clone, Default, Serialize, Deserialize)]
318pub struct CustomRegistration {
319 #[serde(default)]
320 pub classes: Vec<String>,
321 #[serde(default)]
322 pub functions: Vec<String>,
323 #[serde(default)]
324 pub init_calls: Vec<String>,
325}
326
327#[derive(Debug, Clone, Default, Serialize, Deserialize)]
329pub struct CustomRegistrationsConfig {
330 #[serde(default)]
331 pub python: Option<CustomRegistration>,
332 #[serde(default)]
333 pub node: Option<CustomRegistration>,
334 #[serde(default)]
335 pub ruby: Option<CustomRegistration>,
336 #[serde(default)]
337 pub php: Option<CustomRegistration>,
338 #[serde(default)]
339 pub elixir: Option<CustomRegistration>,
340 #[serde(default)]
341 pub wasm: Option<CustomRegistration>,
342}
343
344impl CustomRegistrationsConfig {
345 pub fn for_language(&self, lang: Language) -> Option<&CustomRegistration> {
346 match lang {
347 Language::Python => self.python.as_ref(),
348 Language::Node => self.node.as_ref(),
349 Language::Ruby => self.ruby.as_ref(),
350 Language::Php => self.php.as_ref(),
351 Language::Elixir => self.elixir.as_ref(),
352 Language::Wasm => self.wasm.as_ref(),
353 _ => None,
354 }
355 }
356}