Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
b532577
fix attempt #1
kistz Jul 17, 2026
8644d0e
cover in module test
kistz Jul 17, 2026
fe61c81
forgot to add ty variable
kistz Jul 17, 2026
b3835a8
hm
kistz Jul 17, 2026
e033db0
woops
kistz Jul 17, 2026
f5e8440
ughhh
kistz Jul 17, 2026
bafcbeb
bang
kistz Jul 17, 2026
b7e6406
hmmge
kistz Jul 17, 2026
c9eb6ca
ahhh
kistz Jul 17, 2026
33e8221
aha
kistz Jul 17, 2026
e25d3b3
idk man
kistz Jul 17, 2026
49265cd
wthelly
kistz Jul 17, 2026
fae833e
hmmge
kistz Jul 17, 2026
12d3ba9
jaaa
kistz Jul 17, 2026
59633eb
import missing yek
kistz Jul 17, 2026
e1b3afc
yek
kistz Jul 17, 2026
842b414
Test string column defaults in module migration
clockwork-labs-bot Jul 28, 2026
e8a0dd0
Move string default test to automigration coverage
clockwork-labs-bot Jul 28, 2026
fee7d5b
Merge branch 'master' into deafult-string-fix
bfops Jul 28, 2026
4bb3f45
Fix string default macro lints
clockwork-labs-bot Jul 28, 2026
5db19ae
[bfops/consolidate-default-tests]: C++/Rust schema compare tests
bfops Jul 29, 2026
1b08167
[bfops/consolidate-default-tests]: [revert this] strip down CI
bfops Jul 29, 2026
de11ccf
[bfops/consolidate-default-tests]: fix
bfops Jul 29, 2026
b1e810a
[bfops/consolidate-default-tests]: fix
bfops Jul 29, 2026
d292c68
[bfops/test-suite-fixes]: fix non-forwarded option
bfops Jul 29, 2026
d22a17e
[bfops/test-suite-fixes]: fix
bfops Jul 29, 2026
73c4b6f
[bfops/test-suite-fixes]: review
bfops Jul 29, 2026
18e7aa1
[bfops/test-suite-fixes]: review
bfops Jul 29, 2026
65d2b3e
[bfops/test-suite-fixes]: review
bfops Jul 29, 2026
c439c83
[bfops/test-suite-fixes]: restore comments
bfops Jul 29, 2026
563b102
[bfops/test-suite-fixes]: review
bfops Jul 29, 2026
5c9a37c
[bfops/test-suite-fixes]: review
bfops Jul 29, 2026
b1c18f1
[bfops/consolidate-default-tests]: Merge remote-tracking branch 'orig…
bfops Jul 29, 2026
3e7258b
[bfops/consolidate-default-tests]: revert
bfops Jul 29, 2026
a7e8636
[bfops/consolidate-default-tests]: WIP tests
bfops Jul 29, 2026
28b04f5
[bfops/consolidate-default-tests]: fixes
bfops Jul 29, 2026
2e66dcc
[bfops/consolidate-default-tests]: comment out
bfops Jul 29, 2026
cccd876
[bfops/consolidate-default-tests]: empty
bfops Jul 29, 2026
fa604aa
[bfops/consolidate-default-tests]: empty
bfops Jul 29, 2026
d95227d
[bfops/consolidate-default-tests]: empty
bfops Jul 29, 2026
b0f93a4
[bfops/consolidate-default-tests]: moar fix
bfops Jul 29, 2026
b3ec5f3
Apply suggestion from @bfops
bfops Jul 29, 2026
d75c708
[bfops/consolidate-default-tests]: actually comment
bfops Jul 29, 2026
0139f87
[bfops/consolidate-default-tests]: Merge branch 'bfops/consolidate-de…
bfops Jul 29, 2026
ba86014
[bfops/consolidate-default-tests]: more comment out
bfops Jul 29, 2026
60caa8f
[bfops/consolidate-default-tests]: fix C#
bfops Jul 29, 2026
89a4110
[bfops/consolidate-default-tests]: C# f32s
bfops Jul 29, 2026
fd633dd
[bfops/consolidate-default-tests]: comment
bfops Jul 29, 2026
c8cf4f3
[bfops/consolidate-default-tests]: negative and positive floating points
bfops Jul 29, 2026
42e0b98
[bfops/consolidate-default-tests]: cargo fmt
bfops Jul 29, 2026
42b607d
[bfops/consolidate-default-tests]: comments
bfops Jul 29, 2026
757f729
Merge branch 'master' into bfops/consolidate-default-tests
bfops Jul 30, 2026
5c5f6bb
[bfops/consolidate-default-tests]: update comments
bfops Jul 30, 2026
0e3383e
Revert smoketest string default coverage
clockwork-labs-bot Jul 30, 2026
4c982b0
Fix some default column value bugs (#5630)
bfops Jul 31, 2026
d356e28
Merge branch 'bfops/consolidate-default-tests' into deafult-string-fix
bfops Jul 31, 2026
660037b
Re-enable string column default smoketest
clockwork-labs-bot Jul 31, 2026
53a711a
adjust docs
kistz Jul 31, 2026
f105eed
Fix string default serialization
clockwork-labs-bot Jul 31, 2026
236c24d
Merge remote-tracking branch 'origin/master' into pr-5562
clockwork-labs-bot Aug 4, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 33 additions & 7 deletions crates/bindings-macro/src/table.rs
Original file line number Diff line number Diff line change
Expand Up @@ -741,6 +741,17 @@ struct Column<'a> {
default_value: Option<syn::Expr>,
}

fn is_string_type(ty: &syn::Type) -> bool {
let syn::Type::Path(type_path) = ty else {
return false;
};
type_path
.path
.segments
.last()
.is_some_and(|segment| segment.ident == "String")
}

fn try_find_column<'a, 'b, T: ?Sized>(cols: &'a [Column<'b>], name: &T) -> Option<&'a Column<'b>>
where
Ident: PartialEq<T>,
Expand Down Expand Up @@ -1013,10 +1024,17 @@ pub(crate) fn table_impl(mut args: TableArgs, item: &syn::DeriveInput) -> syn::R
if let Some(val) = &col.default_value {
let ty = &col.ty;
let ident_span = col.ident.span();
Some(quote_spanned! { ident_span =>

if is_string_type(ty) {
Some(quote_spanned! { ident_span =>
let _check: &'static str = #val;
})
} else {
// This closure enforces that `val` is of type `ty` at compile-time.
let _check: #ty = #val;
})
Some(quote_spanned! { ident_span =>
let _check: #ty = #val;
})
}
} else {
None
}
Expand All @@ -1027,13 +1045,21 @@ pub(crate) fn table_impl(mut args: TableArgs, item: &syn::DeriveInput) -> syn::R
if let Some(val) = &col.default_value {
let col_id = col.index;
let ty = &col.ty;
let value = if is_string_type(ty) {
quote! {
let value: &'static str = #val;
value.serialize(spacetimedb::sats::algebraic_value::ser::ValueSerializer).expect("default value serialization failed")
}
} else {
quote! {
let value: #ty = #val;
value.serialize(spacetimedb::sats::algebraic_value::ser::ValueSerializer).expect("default value serialization failed")
}
};
Some(quote! {
spacetimedb::table::ColumnDefault {
col_id: #col_id,
value: {
let value: #ty = #val;
value.serialize(spacetimedb::sats::algebraic_value::ser::ValueSerializer).expect("default value serialization failed")
},
value: { #value },
},
})
} else {
Expand Down
7 changes: 3 additions & 4 deletions crates/smoketests/tests/smoketests/column_defaults.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,7 @@ const EXPECTED_DEFAULTS: &[(&str, &str)] = &[
("f32_negative_value", "-32.5"),
("f64_positive_value", "64.25"),
("f64_negative_value", "-64.25"),
// TODO: uncomment this once string default values are fixed in Rust
//("string_value", r#""default string""#),
("string_value", r#""default string""#),
];

fn test_defaults(test: &mut Smoketest, publish_updated: impl FnOnce(&mut Smoketest)) {
Expand Down Expand Up @@ -134,8 +133,8 @@ pub struct DefaultsTestTable {
pub f64_positive_value: f64,
#[default(-64.25)]
pub f64_negative_value: f64,
// #[default("default string")]
// pub string_value: String,
#[default("default string")]
pub string_value: String,
}
"#;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,10 +82,6 @@ pub struct Player {

The `#[default(value)]` attribute specifies the default value. The expression must be const-evaluable (usable in a `const` context).

:::note Rust Limitation
Default values in Rust must be const-evaluable. This means you **cannot** use `String` defaults like `#[default("".to_string())]` because `.to_string()` is not a const fn. Only primitive types, enums, and other const-constructible types can have defaults.
:::

</TabItem>
<TabItem value="cpp" label="C++">

Expand Down
Loading