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 exclude_functions: Vec<String>,
97 #[serde(default)]
99 pub exclude_types: Vec<String>,
100 #[serde(default)]
102 pub extra_dependencies: HashMap<String, toml::Value>,
103 #[serde(default)]
105 pub scaffold_output: Option<PathBuf>,
106}
107
108#[derive(Debug, Clone, Serialize, Deserialize)]
109pub struct PhpConfig {
110 pub extension_name: Option<String>,
111 #[serde(default)]
114 pub feature_gate: Option<String>,
115 #[serde(default)]
117 pub stubs: Option<StubsConfig>,
118 #[serde(default)]
119 pub features: Option<Vec<String>>,
120 #[serde(default)]
123 pub serde_rename_all: Option<String>,
124 #[serde(default)]
126 pub exclude_functions: Vec<String>,
127 #[serde(default)]
129 pub exclude_types: Vec<String>,
130 #[serde(default)]
132 pub extra_dependencies: HashMap<String, toml::Value>,
133 #[serde(default)]
135 pub scaffold_output: Option<PathBuf>,
136}
137
138#[derive(Debug, Clone, Serialize, Deserialize)]
139pub struct ElixirConfig {
140 pub app_name: Option<String>,
141 #[serde(default)]
142 pub features: Option<Vec<String>>,
143 #[serde(default)]
146 pub serde_rename_all: Option<String>,
147 #[serde(default)]
149 pub exclude_functions: Vec<String>,
150 #[serde(default)]
152 pub exclude_types: Vec<String>,
153 #[serde(default)]
155 pub extra_dependencies: HashMap<String, toml::Value>,
156 #[serde(default)]
158 pub scaffold_output: Option<PathBuf>,
159}
160
161#[derive(Debug, Clone, Serialize, Deserialize)]
162pub struct WasmConfig {
163 #[serde(default)]
164 pub exclude_functions: Vec<String>,
165 #[serde(default)]
166 pub exclude_types: Vec<String>,
167 #[serde(default)]
168 pub type_overrides: HashMap<String, String>,
169 #[serde(default)]
170 pub features: Option<Vec<String>>,
171 #[serde(default)]
174 pub serde_rename_all: Option<String>,
175 #[serde(default)]
178 pub type_prefix: Option<String>,
179 #[serde(default)]
182 pub exclude_reexports: Vec<String>,
183 #[serde(default)]
185 pub env_shims: Vec<String>,
186 #[serde(default)]
188 pub extra_dependencies: HashMap<String, toml::Value>,
189}
190
191#[derive(Debug, Clone, Serialize, Deserialize)]
192pub struct FfiConfig {
193 pub prefix: Option<String>,
194 #[serde(default = "default_error_style")]
195 pub error_style: String,
196 pub header_name: Option<String>,
197 #[serde(default)]
200 pub lib_name: Option<String>,
201 #[serde(default)]
203 pub visitor_callbacks: bool,
204 #[serde(default)]
205 pub features: Option<Vec<String>>,
206 #[serde(default)]
209 pub serde_rename_all: Option<String>,
210 #[serde(default)]
212 pub exclude_functions: Vec<String>,
213 #[serde(default)]
215 pub exclude_types: Vec<String>,
216}
217
218fn default_error_style() -> String {
219 "last_error".to_string()
220}
221
222#[derive(Debug, Clone, Serialize, Deserialize)]
223pub struct GoConfig {
224 pub module: Option<String>,
225 pub package_name: Option<String>,
227 #[serde(default)]
228 pub features: Option<Vec<String>>,
229 #[serde(default)]
232 pub serde_rename_all: Option<String>,
233}
234
235#[derive(Debug, Clone, Serialize, Deserialize)]
236pub struct JavaConfig {
237 pub package: Option<String>,
238 #[serde(default = "default_java_ffi_style")]
239 pub ffi_style: String,
240 #[serde(default)]
241 pub features: Option<Vec<String>>,
242 #[serde(default)]
245 pub serde_rename_all: Option<String>,
246}
247
248fn default_java_ffi_style() -> String {
249 "panama".to_string()
250}
251
252#[derive(Debug, Clone, Serialize, Deserialize)]
253pub struct CSharpConfig {
254 pub namespace: Option<String>,
255 pub target_framework: Option<String>,
256 #[serde(default)]
257 pub features: Option<Vec<String>>,
258 #[serde(default)]
261 pub serde_rename_all: Option<String>,
262}
263
264#[derive(Debug, Clone, Serialize, Deserialize)]
265pub struct RConfig {
266 pub package_name: Option<String>,
267 #[serde(default)]
268 pub features: Option<Vec<String>>,
269 #[serde(default)]
272 pub serde_rename_all: Option<String>,
273}
274
275#[derive(Debug, Clone, Default, Serialize, Deserialize)]
278pub struct CustomModulesConfig {
279 #[serde(default)]
280 pub python: Vec<String>,
281 #[serde(default)]
282 pub node: Vec<String>,
283 #[serde(default)]
284 pub ruby: Vec<String>,
285 #[serde(default)]
286 pub php: Vec<String>,
287 #[serde(default)]
288 pub elixir: Vec<String>,
289 #[serde(default)]
290 pub wasm: Vec<String>,
291 #[serde(default)]
292 pub ffi: Vec<String>,
293 #[serde(default)]
294 pub go: Vec<String>,
295 #[serde(default)]
296 pub java: Vec<String>,
297 #[serde(default)]
298 pub csharp: Vec<String>,
299 #[serde(default)]
300 pub r: Vec<String>,
301}
302
303impl CustomModulesConfig {
304 pub fn for_language(&self, lang: Language) -> &[String] {
305 match lang {
306 Language::Python => &self.python,
307 Language::Node => &self.node,
308 Language::Ruby => &self.ruby,
309 Language::Php => &self.php,
310 Language::Elixir => &self.elixir,
311 Language::Wasm => &self.wasm,
312 Language::Ffi => &self.ffi,
313 Language::Go => &self.go,
314 Language::Java => &self.java,
315 Language::Csharp => &self.csharp,
316 Language::R => &self.r,
317 Language::Rust => &[], }
319 }
320}
321
322#[derive(Debug, Clone, Default, Serialize, Deserialize)]
324pub struct CustomRegistration {
325 #[serde(default)]
326 pub classes: Vec<String>,
327 #[serde(default)]
328 pub functions: Vec<String>,
329 #[serde(default)]
330 pub init_calls: Vec<String>,
331}
332
333#[derive(Debug, Clone, Default, Serialize, Deserialize)]
335pub struct CustomRegistrationsConfig {
336 #[serde(default)]
337 pub python: Option<CustomRegistration>,
338 #[serde(default)]
339 pub node: Option<CustomRegistration>,
340 #[serde(default)]
341 pub ruby: Option<CustomRegistration>,
342 #[serde(default)]
343 pub php: Option<CustomRegistration>,
344 #[serde(default)]
345 pub elixir: Option<CustomRegistration>,
346 #[serde(default)]
347 pub wasm: Option<CustomRegistration>,
348}
349
350impl CustomRegistrationsConfig {
351 pub fn for_language(&self, lang: Language) -> Option<&CustomRegistration> {
352 match lang {
353 Language::Python => self.python.as_ref(),
354 Language::Node => self.node.as_ref(),
355 Language::Ruby => self.ruby.as_ref(),
356 Language::Php => self.php.as_ref(),
357 Language::Elixir => self.elixir.as_ref(),
358 Language::Wasm => self.wasm.as_ref(),
359 _ => None,
360 }
361 }
362}