Skip to content

Commit b9660fa

Browse files
Merge pull request #198 from tauri-apps/feat/json-output2
Feat: add `json` subcommand
2 parents c59ba49 + 8514300 commit b9660fa

File tree

15 files changed

+1173
-58
lines changed

15 files changed

+1173
-58
lines changed

.github/workflows/ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ jobs:
7676
with:
7777
components: clippy
7878
- uses: Swatinem/rust-cache@v2
79-
- run: cargo clippy --workspace -- -Dclippy::all -Dclippy::pedantic
79+
- run: cargo clippy --workspace --features unstable -- -Dclippy::all -Dclippy::pedantic
8080

8181
rustfmt:
8282
name: Rustfmt

Cargo.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ serde = "1.0.188"
3333
quote = "1.0.33"
3434
proc-macro2 = "1.0.67"
3535
syn = "2.0.33"
36+
schemars = "0.8.12"
37+
serde_json = "1.0"
3638
tauri = "2.0.0-alpha.14"
3739

3840
[dependencies]
@@ -48,6 +50,7 @@ miette.workspace = true
4850
env_logger = "0.10.0"
4951
log.workspace = true
5052
clap_complete = "4.4.1"
53+
serde_json.workspace = true
5154

5255
[features]
5356
unstable = ["dep:tauri-bindgen-gen-markdown"]

crates/gen-guest-js/src/lib.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,8 @@ pub struct JavaScript {
6363
impl JavaScript {
6464
fn print_function(&self, intf_name: &str, func: &Function) -> String {
6565
let docs = self.print_docs(func);
66-
let ident = func.ident.to_lower_camel_case();
67-
let name = func.ident.to_snake_case();
66+
let ident = func.id.to_lower_camel_case();
67+
let name = func.id.to_snake_case();
6868
let params = print_function_params(&func.params);
6969

7070
let deserialize_result = func
@@ -109,7 +109,8 @@ export async function {ident} ({params}) {{
109109
let docs = self.print_docs(func);
110110
let mod_ident = mod_ident.to_snake_case();
111111
let resource_ident = ident.to_snake_case();
112-
let ident = func.ident.to_lower_camel_case();
112+
let ident = func.id.to_lower_camel_case();
113+
113114
let params = print_function_params(&func.params);
114115

115116
let deserialize_result = func

crates/gen-guest-rust/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ impl RustWasm {
8383
&BorrowMode::Owned,
8484
);
8585

86-
let ident = func.ident.to_snake_case();
86+
let ident = func.id.to_snake_case();
8787

8888
let param_idents = func
8989
.params
@@ -157,7 +157,7 @@ impl RustGenerator for RustWasm {
157157
);
158158

159159
let mod_ident = format!("{mod_ident}::resource::{}", ident.to_string().to_snake_case());
160-
let ident = func.ident.to_snake_case();
160+
let ident = func.id.to_snake_case();
161161

162162
let param_idents = func
163163
.params

crates/gen-guest-ts/src/lib.rs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,8 @@ impl TypeScript {
7272
pub fn print_function(&self, intf_name: &str, func: &Function) -> String {
7373
let docs = print_docs(&func.docs);
7474

75-
let ident = func.ident.to_lower_camel_case();
76-
let name = func.ident.to_snake_case();
75+
let ident = func.id.to_lower_camel_case();
76+
let name = func.id.to_snake_case();
7777

7878
let params = self.print_function_params(&func.params);
7979

@@ -221,7 +221,7 @@ export async function {ident} ({params}) : {result} {{
221221
.iter()
222222
.map(|field| {
223223
let docs = print_docs(&field.docs);
224-
let ident = field.ident.to_lower_camel_case();
224+
let ident = field.id.to_lower_camel_case();
225225
let ty = self.print_type(&field.ty);
226226

227227
format!("{docs}\n{ident}: {ty},\n")
@@ -237,7 +237,7 @@ export async function {ident} ({params}) : {result} {{
237237
.enumerate()
238238
.map(|(i, field)| {
239239
let docs = print_docs(&field.docs);
240-
let ident = field.ident.to_upper_camel_case();
240+
let ident = field.id.to_upper_camel_case();
241241
let value: u64 = 2 << i;
242242

243243
format!("{docs}\n{ident} = {value},\n")
@@ -253,7 +253,7 @@ export async function {ident} ({params}) : {result} {{
253253
.enumerate()
254254
.map(|(i, case)| {
255255
let docs = print_docs(&case.docs);
256-
let case_ident = case.ident.to_upper_camel_case();
256+
let case_ident = case.id.to_upper_camel_case();
257257
let value = case
258258
.ty
259259
.as_ref()
@@ -271,7 +271,7 @@ export async function {ident} ({params}) : {result} {{
271271
.iter()
272272
.map(|case| {
273273
let docs = print_docs(&case.docs);
274-
let case_ident = case.ident.to_upper_camel_case();
274+
let case_ident = case.id.to_upper_camel_case();
275275

276276
format!("{docs}\n{ident}{case_ident}")
277277
})
@@ -286,7 +286,7 @@ export async function {ident} ({params}) : {result} {{
286286
.iter()
287287
.map(|case| {
288288
let docs = print_docs(&case.docs);
289-
let ident = case.ident.to_upper_camel_case();
289+
let ident = case.id.to_upper_camel_case();
290290

291291
format!("{docs}\n{ident},\n")
292292
})
@@ -321,9 +321,10 @@ export async function {ident} ({params}) : {result} {{
321321
.iter()
322322
.map(|func| {
323323
let docs = print_docs(&func.docs);
324+
324325
let mod_ident = mod_ident.to_snake_case();
325326
let resource_ident = ident.to_snake_case();
326-
let ident = func.ident.to_lower_camel_case();
327+
let ident = func.id.to_lower_camel_case();
327328

328329
let params = self.print_function_params(&func.params);
329330
let result = func

crates/gen-host/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,7 @@ impl Host {
311311
}
312312

313313
fn print_router_fn_definition(&self, mod_name: &str, func: &Function) -> TokenStream {
314-
let func_name = func.ident.to_snake_case();
314+
let func_name = func.id.to_snake_case();
315315
let func_ident = format_ident!("{}", func_name);
316316

317317
let param_decl = match func.params.len() {
@@ -378,7 +378,7 @@ impl Host {
378378
resource_name: &str,
379379
method: &Function,
380380
) -> TokenStream {
381-
let func_name = method.ident.to_snake_case();
381+
let func_name = method.id.to_snake_case();
382382
let func_ident = format_ident!("{}", func_name);
383383

384384
let param_decl = method

crates/gen-js/src/lib.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ pub trait JavaScriptGenerator {
135135
let fields = fields
136136
.iter()
137137
.map(|field| {
138-
let ident = field.ident.to_lower_camel_case();
138+
let ident = field.id.to_lower_camel_case();
139139

140140
format!("{ident}: {}", self.print_deserialize_ty(&field.ty))
141141
})
@@ -177,7 +177,7 @@ pub trait JavaScriptGenerator {
177177
.as_ref()
178178
.map_or("null".to_string(), |ty| self.print_deserialize_ty(ty));
179179

180-
let ident = case.ident.to_upper_camel_case();
180+
let ident = case.id.to_upper_camel_case();
181181

182182
format!(
183183
"case {tag}:
@@ -205,7 +205,7 @@ pub trait JavaScriptGenerator {
205205
.iter()
206206
.enumerate()
207207
.map(|(tag, case)| {
208-
let ident = case.ident.to_upper_camel_case();
208+
let ident = case.id.to_upper_camel_case();
209209
format!(
210210
"case {tag}:
211211
return \"{ident}\"
@@ -346,7 +346,7 @@ pub trait JavaScriptGenerator {
346346
fn print_serialize_record(&self, ident: &str, fields: &[RecordField]) -> String {
347347
let inner = fields
348348
.iter()
349-
.map(|field| self.print_serialize_ty(&format!("val.{}", field.ident), &field.ty))
349+
.map(|field| self.print_serialize_ty(&format!("val.{}", field.id), &field.ty))
350350
.collect::<Vec<_>>()
351351
.join(",\n");
352352

@@ -378,7 +378,7 @@ pub trait JavaScriptGenerator {
378378
.iter()
379379
.enumerate()
380380
.map(|(tag, case)| {
381-
let prop_access = format!("val.{}", case.ident.to_upper_camel_case());
381+
let prop_access = format!("val.{}", case.id.to_upper_camel_case());
382382

383383
let inner = case.ty.as_ref().map_or(String::new(), |ty| {
384384
self.print_serialize_ty(&prop_access, ty)
@@ -409,7 +409,7 @@ pub trait JavaScriptGenerator {
409409
.iter()
410410
.enumerate()
411411
.map(|(tag, case)| {
412-
let ident = case.ident.to_upper_camel_case();
412+
let ident = case.id.to_upper_camel_case();
413413
format!(
414414
"case \"{ident}\":
415415
serializeU32(out, {tag})

crates/gen-markdown/src/lib.rs

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ impl Markdown {
8888
.map(|field| {
8989
format!(
9090
"#### {ident}: `{ty}`\n{docs}\n",
91-
ident = field.ident,
91+
ident = field.id,
9292
ty = self.print_ty(&field.ty),
9393
docs = field.docs
9494
)
@@ -103,7 +103,7 @@ impl Markdown {
103103
.map(|field| {
104104
format!(
105105
"#### {ident}\n{docs}\n",
106-
ident = field.ident,
106+
ident = field.id,
107107
docs = field.docs
108108
)
109109
})
@@ -117,7 +117,7 @@ impl Markdown {
117117
.map(|case| {
118118
format!(
119119
"#### {ident}{ty}\n{docs}\n",
120-
ident = case.ident,
120+
ident = case.id,
121121
ty = case
122122
.ty
123123
.as_ref()
@@ -134,11 +134,7 @@ impl Markdown {
134134
let cases = cases
135135
.iter()
136136
.map(|case| {
137-
format!(
138-
"#### {ident}\n{docs}\n",
139-
ident = case.ident,
140-
docs = case.docs
141-
)
137+
format!("#### {ident}\n{docs}\n", ident = case.id, docs = case.docs)
142138
})
143139
.collect::<String>();
144140

@@ -164,7 +160,7 @@ impl Markdown {
164160
.map(|func| {
165161
format!(
166162
"### Method {ident}\n\n`func {ident} ({params}){result}`\n\n{docs}",
167-
ident = func.ident,
163+
ident = func.id,
168164
params = self.print_named_types(&func.params),
169165
result = func
170166
.result
@@ -184,7 +180,7 @@ impl Markdown {
184180
fn print_function(&self, func: &Function) -> String {
185181
format!(
186182
"### Function {ident}\n\n` func {ident} ({params}){result}`\n\n{docs}",
187-
ident = func.ident,
183+
ident = func.id,
188184
params = self.print_named_types(&func.params),
189185
result = func
190186
.result

crates/gen-rust/src/lib.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ pub trait RustGenerator {
224224
let borrow_attr = self
225225
.needs_borrow(&field.ty, mode)
226226
.then_some(quote! { #[serde(borrow)] });
227-
let ident = format_ident!("{}", field.ident.to_snake_case());
227+
let ident = format_ident!("{}", field.id.to_snake_case());
228228
let ty = self.print_ty(&field.ty, mode);
229229

230230
quote! {
@@ -248,7 +248,7 @@ pub trait RustGenerator {
248248
let fields = fields
249249
.iter()
250250
.enumerate()
251-
.map(|(i, FlagsField { docs, ident })| {
251+
.map(|(i, FlagsField { docs, id: ident })| {
252252
let docs = self.print_docs(docs);
253253
let ident = format_ident!("{}", ident.TO_SHOUTY_SNEK_CASE());
254254
let i = Literal::usize_unsuffixed(i);
@@ -295,7 +295,7 @@ pub trait RustGenerator {
295295

296296
fn print_variant_case(&self, case: &VariantCase, mode: &BorrowMode) -> TokenStream {
297297
let docs = self.print_docs(&case.docs);
298-
let ident = format_ident!("{}", case.ident.to_upper_camel_case());
298+
let ident = format_ident!("{}", case.id.to_upper_camel_case());
299299

300300
let payload = case.ty.as_ref().map(|ty| {
301301
let ty = self.print_ty(ty, mode);
@@ -332,7 +332,7 @@ pub trait RustGenerator {
332332

333333
fn print_enum_case(&self, case: &EnumCase) -> TokenStream {
334334
let docs = self.print_docs(&case.docs);
335-
let ident = format_ident!("{}", case.ident.to_upper_camel_case());
335+
let ident = format_ident!("{}", case.id.to_upper_camel_case());
336336

337337
quote! {
338338
#docs
@@ -383,7 +383,7 @@ pub trait RustGenerator {
383383
results_mode: &BorrowMode,
384384
) -> TokenStream {
385385
let docs = self.print_docs(&sig.func.docs);
386-
let ident = format_ident!("{}", sig.func.ident.to_snake_case());
386+
let ident = format_ident!("{}", sig.func.id.to_snake_case());
387387

388388
let pub_ = (!sig.private).then_some(quote! { pub });
389389
let unsafe_ = sig.unsafe_.then_some(quote! { unsafe });

crates/wit-parser/Cargo.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ id-arena = "2.2.1"
1313
miette.workspace = true
1414
distance = "0.4.0"
1515
log.workspace = true
16+
serde = { workspace = true, features = ["derive"] }
17+
schemars.workspace = true
1618

1719
[dev-dependencies]
1820
pretty_assertions = "1.4.0"
21+
schemars = { version = "0.8.12", features = ["impl_json_schema"] }
22+
serde_json.workspace = true

0 commit comments

Comments
 (0)