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}
26
27#[derive(Debug, Clone, Serialize, Deserialize)]
28pub struct StubsConfig {
29 pub output: PathBuf,
30}
31
32#[derive(Debug, Clone, Serialize, Deserialize)]
33pub struct NodeConfig {
34 pub package_name: Option<String>,
35 #[serde(default)]
38 pub features: Option<Vec<String>>,
39 #[serde(default)]
42 pub serde_rename_all: Option<String>,
43 #[serde(default)]
46 pub type_prefix: Option<String>,
47}
48
49#[derive(Debug, Clone, Serialize, Deserialize)]
50pub struct RubyConfig {
51 pub gem_name: Option<String>,
52 pub stubs: Option<StubsConfig>,
53 #[serde(default)]
56 pub features: Option<Vec<String>>,
57 #[serde(default)]
60 pub serde_rename_all: Option<String>,
61}
62
63#[derive(Debug, Clone, Serialize, Deserialize)]
64pub struct PhpConfig {
65 pub extension_name: Option<String>,
66 #[serde(default)]
69 pub feature_gate: Option<String>,
70 #[serde(default)]
72 pub stubs: Option<StubsConfig>,
73 #[serde(default)]
74 pub features: Option<Vec<String>>,
75 #[serde(default)]
78 pub serde_rename_all: Option<String>,
79 #[serde(default)]
81 pub exclude_functions: Vec<String>,
82 #[serde(default)]
84 pub exclude_types: Vec<String>,
85}
86
87#[derive(Debug, Clone, Serialize, Deserialize)]
88pub struct ElixirConfig {
89 pub app_name: Option<String>,
90 #[serde(default)]
91 pub features: Option<Vec<String>>,
92 #[serde(default)]
95 pub serde_rename_all: Option<String>,
96 #[serde(default)]
98 pub exclude_functions: Vec<String>,
99 #[serde(default)]
101 pub exclude_types: Vec<String>,
102}
103
104#[derive(Debug, Clone, Serialize, Deserialize)]
105pub struct WasmConfig {
106 #[serde(default)]
107 pub exclude_functions: Vec<String>,
108 #[serde(default)]
109 pub exclude_types: Vec<String>,
110 #[serde(default)]
111 pub type_overrides: HashMap<String, String>,
112 #[serde(default)]
113 pub features: Option<Vec<String>>,
114 #[serde(default)]
117 pub serde_rename_all: Option<String>,
118 #[serde(default)]
121 pub type_prefix: Option<String>,
122 #[serde(default)]
125 pub exclude_reexports: Vec<String>,
126}
127
128#[derive(Debug, Clone, Serialize, Deserialize)]
129pub struct FfiConfig {
130 pub prefix: Option<String>,
131 #[serde(default = "default_error_style")]
132 pub error_style: String,
133 pub header_name: Option<String>,
134 #[serde(default)]
137 pub lib_name: Option<String>,
138 #[serde(default)]
140 pub visitor_callbacks: bool,
141 #[serde(default)]
142 pub features: Option<Vec<String>>,
143 #[serde(default)]
146 pub serde_rename_all: Option<String>,
147}
148
149fn default_error_style() -> String {
150 "last_error".to_string()
151}
152
153#[derive(Debug, Clone, Serialize, Deserialize)]
154pub struct GoConfig {
155 pub module: Option<String>,
156 pub package_name: Option<String>,
158 #[serde(default)]
159 pub features: Option<Vec<String>>,
160 #[serde(default)]
163 pub serde_rename_all: Option<String>,
164}
165
166#[derive(Debug, Clone, Serialize, Deserialize)]
167pub struct JavaConfig {
168 pub package: Option<String>,
169 #[serde(default = "default_java_ffi_style")]
170 pub ffi_style: String,
171 #[serde(default)]
172 pub features: Option<Vec<String>>,
173 #[serde(default)]
176 pub serde_rename_all: Option<String>,
177}
178
179fn default_java_ffi_style() -> String {
180 "panama".to_string()
181}
182
183#[derive(Debug, Clone, Serialize, Deserialize)]
184pub struct CSharpConfig {
185 pub namespace: Option<String>,
186 pub target_framework: Option<String>,
187 #[serde(default)]
188 pub features: Option<Vec<String>>,
189 #[serde(default)]
192 pub serde_rename_all: Option<String>,
193}
194
195#[derive(Debug, Clone, Serialize, Deserialize)]
196pub struct RConfig {
197 pub package_name: Option<String>,
198 #[serde(default)]
199 pub features: Option<Vec<String>>,
200 #[serde(default)]
203 pub serde_rename_all: Option<String>,
204}
205
206#[derive(Debug, Clone, Default, Serialize, Deserialize)]
209pub struct CustomModulesConfig {
210 #[serde(default)]
211 pub python: Vec<String>,
212 #[serde(default)]
213 pub node: Vec<String>,
214 #[serde(default)]
215 pub ruby: Vec<String>,
216 #[serde(default)]
217 pub php: Vec<String>,
218 #[serde(default)]
219 pub elixir: Vec<String>,
220 #[serde(default)]
221 pub wasm: Vec<String>,
222 #[serde(default)]
223 pub ffi: Vec<String>,
224 #[serde(default)]
225 pub go: Vec<String>,
226 #[serde(default)]
227 pub java: Vec<String>,
228 #[serde(default)]
229 pub csharp: Vec<String>,
230 #[serde(default)]
231 pub r: Vec<String>,
232}
233
234impl CustomModulesConfig {
235 pub fn for_language(&self, lang: Language) -> &[String] {
236 match lang {
237 Language::Python => &self.python,
238 Language::Node => &self.node,
239 Language::Ruby => &self.ruby,
240 Language::Php => &self.php,
241 Language::Elixir => &self.elixir,
242 Language::Wasm => &self.wasm,
243 Language::Ffi => &self.ffi,
244 Language::Go => &self.go,
245 Language::Java => &self.java,
246 Language::Csharp => &self.csharp,
247 Language::R => &self.r,
248 Language::Rust => &[], }
250 }
251}
252
253#[derive(Debug, Clone, Default, Serialize, Deserialize)]
255pub struct CustomRegistration {
256 #[serde(default)]
257 pub classes: Vec<String>,
258 #[serde(default)]
259 pub functions: Vec<String>,
260 #[serde(default)]
261 pub init_calls: Vec<String>,
262}
263
264#[derive(Debug, Clone, Default, Serialize, Deserialize)]
266pub struct CustomRegistrationsConfig {
267 #[serde(default)]
268 pub python: Option<CustomRegistration>,
269 #[serde(default)]
270 pub node: Option<CustomRegistration>,
271 #[serde(default)]
272 pub ruby: Option<CustomRegistration>,
273 #[serde(default)]
274 pub php: Option<CustomRegistration>,
275 #[serde(default)]
276 pub elixir: Option<CustomRegistration>,
277 #[serde(default)]
278 pub wasm: Option<CustomRegistration>,
279}
280
281impl CustomRegistrationsConfig {
282 pub fn for_language(&self, lang: Language) -> Option<&CustomRegistration> {
283 match lang {
284 Language::Python => self.python.as_ref(),
285 Language::Node => self.node.as_ref(),
286 Language::Ruby => self.ruby.as_ref(),
287 Language::Php => self.php.as_ref(),
288 Language::Elixir => self.elixir.as_ref(),
289 Language::Wasm => self.wasm.as_ref(),
290 _ => None,
291 }
292 }
293}