+7
CHANGELOG.md
+7
CHANGELOG.md
···
1
# Changelog
2
3
4
+
## `jacquard-api` [0.5.5], `jacquard-lexicon` [0.5.4] - 2025-10-16
5
+
6
+
### Fixed
7
+
8
+
- events.smokesignal.invokeWebhook lexicon now generates valid code
9
+
- lexicon code generation now uses `Data` for blank objects, rather than naming and then failing to generate a struct
10
+
11
## [0.5.4] - 2025-10-16
12
13
### Added
+3
-3
Cargo.lock
+3
-3
Cargo.lock
···
1857
"clap",
1858
"getrandom 0.2.16",
1859
"http",
1860
-
"jacquard-api 0.5.4",
1861
"jacquard-common 0.5.4",
1862
"jacquard-derive 0.5.4",
1863
"jacquard-identity 0.5.3",
···
1896
1897
[[package]]
1898
name = "jacquard-api"
1899
-
version = "0.5.4"
1900
dependencies = [
1901
"bon",
1902
"bytes",
···
2070
"bytes",
2071
"hickory-resolver",
2072
"http",
2073
-
"jacquard-api 0.5.4",
2074
"jacquard-common 0.5.4",
2075
"miette",
2076
"percent-encoding",
···
1857
"clap",
1858
"getrandom 0.2.16",
1859
"http",
1860
+
"jacquard-api 0.5.5",
1861
"jacquard-common 0.5.4",
1862
"jacquard-derive 0.5.4",
1863
"jacquard-identity 0.5.3",
···
1896
1897
[[package]]
1898
name = "jacquard-api"
1899
+
version = "0.5.5"
1900
dependencies = [
1901
"bon",
1902
"bytes",
···
2070
"bytes",
2071
"hickory-resolver",
2072
"http",
2073
+
"jacquard-api 0.5.5",
2074
"jacquard-common 0.5.4",
2075
"miette",
2076
"percent-encoding",
+1
-1
crates/jacquard-api/Cargo.toml
+1
-1
crates/jacquard-api/Cargo.toml
+2
-2
crates/jacquard-api/src/events_smokesignal/automation/invoke_webhook.rs
+2
-2
crates/jacquard-api/src/events_smokesignal/automation/invoke_webhook.rs
···
20
#[builder(start_fn = new)]
21
pub struct InvokeWebhook<'a> {
22
#[serde(borrow)]
23
-
pub context: InvokeWebhookContext<'a>,
24
#[serde(borrow)]
25
#[builder(into)]
26
pub event: jacquard_common::CowStr<'a>,
27
#[serde(borrow)]
28
-
pub record: InvokeWebhookRecord<'a>,
29
#[serde(flatten)]
30
#[serde(borrow)]
31
#[builder(default)]
···
20
#[builder(start_fn = new)]
21
pub struct InvokeWebhook<'a> {
22
#[serde(borrow)]
23
+
pub context: jacquard_common::types::value::Data<'a>,
24
#[serde(borrow)]
25
#[builder(into)]
26
pub event: jacquard_common::CowStr<'a>,
27
#[serde(borrow)]
28
+
pub record: jacquard_common::types::value::Data<'a>,
29
#[serde(flatten)]
30
#[serde(borrow)]
31
#[builder(default)]
+5
-1
crates/jacquard-lexicon/src/codegen/types.rs
+5
-1
crates/jacquard-lexicon/src/codegen/types.rs
···
51
Ok(quote! { Vec<#item_type> })
52
}
53
}
54
-
LexObjectProperty::Object(_object) => {
55
// Generate unique nested object type name with collision detection
56
let object_name = self.generate_field_type_name(nsid, parent_type_name, field_name, "");
57
let object_ident = syn::Ident::new(&object_name, proc_macro2::Span::call_site());
···
51
Ok(quote! { Vec<#item_type> })
52
}
53
}
54
+
LexObjectProperty::Object(object) => {
55
+
// Empty objects (no properties) are untyped data bags
56
+
if object.properties.is_empty() {
57
+
return Ok(quote! { jacquard_common::types::value::Data<'a> });
58
+
}
59
// Generate unique nested object type name with collision detection
60
let object_name = self.generate_field_type_name(nsid, parent_type_name, field_name, "");
61
let object_ident = syn::Ident::new(&object_name, proc_macro2::Span::call_site());