Skip to content

Commit 93491ac

Browse files
committed
expose descriver v10
1 parent 19e52b3 commit 93491ac

2 files changed

Lines changed: 20 additions & 14 deletions

File tree

crates/bindings-sys/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -924,7 +924,7 @@ pub mod raw {
924924
/// would be where you would initialize the interepreter and load the user module into it.
925925
fn __setup__() -> Result;
926926
/// Required. Runs after `__setup__`; returns all the exports for the module.
927-
fn __describe_module__() -> Encoded<ModuleDef>;
927+
fn __describe_module_v10__() -> Encoded<ModuleDef>;
928928
/// Required. id is an index into the `ModuleDef.reducers` returned from `__describe_module__`.
929929
/// args is a bsatn-encoded product value defined by the schema at `reducers[id]`.
930930
fn __call_reducer__(

crates/bindings/src/rt.rs

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ use crate::query_builder::Query;
44
use crate::table::IndexAlgo;
55
use crate::{sys, AnonymousViewContext, IterBuf, ReducerContext, ReducerResult, SpacetimeType, Table, ViewContext};
66
use spacetimedb_lib::bsatn::EncodeError;
7+
use spacetimedb_lib::db::raw_def::v10::RawModuleDefV10Builder;
78
pub use spacetimedb_lib::db::raw_def::v9::Lifecycle as LifecycleReducer;
8-
use spacetimedb_lib::db::raw_def::v9::{RawIndexAlgorithm, RawModuleDefV9Builder, TableType, ViewResultHeader};
9+
use spacetimedb_lib::db::raw_def::v9::{RawIndexAlgorithm, TableType, ViewResultHeader};
910
use spacetimedb_lib::de::{self, Deserialize, DeserializeOwned, Error as _, SeqProductAccess};
1011
use spacetimedb_lib::sats::typespace::TypespaceBuilder;
1112
use spacetimedb_lib::sats::{impl_deserialize, impl_serialize, ProductTypeElement};
@@ -674,7 +675,7 @@ pub trait RowLevelSecurityInfo {
674675
}
675676

676677
/// A function which will be registered by [`register_describer`] into [`DESCRIBERS`],
677-
/// which will be called by [`__describe_module__`] to construct a module definition.
678+
/// which will be called by [`__describe_module_v10__`] to construct a module definition.
678679
///
679680
/// May be a closure over static data, so that e.g.
680681
/// [`register_row_level_security`] doesn't need to take a type parameter.
@@ -700,6 +701,13 @@ pub fn register_reftype<T: SpacetimeType>() {
700701
pub fn register_table<T: Table>() {
701702
register_describer(|module| {
702703
let product_type_ref = *T::Row::make_type(&mut module.inner).as_ref().unwrap();
704+
if let Some(schedule) = T::SCHEDULE {
705+
module.inner.add_schedule(
706+
T::TABLE_NAME,
707+
schedule.scheduled_at_column,
708+
schedule.reducer_or_procedure_name,
709+
);
710+
}
703711

704712
let mut table = module
705713
.inner
@@ -719,10 +727,6 @@ pub fn register_table<T: Table>() {
719727
for &col in T::SEQUENCES {
720728
table = table.with_column_sequence(col);
721729
}
722-
if let Some(schedule) = T::SCHEDULE {
723-
table = table.with_schedule(schedule.reducer_or_procedure_name, schedule.scheduled_at_column);
724-
}
725-
726730
for col in T::get_default_col_values().iter_mut() {
727731
table = table.with_default_column_value(col.col_id, col.value.clone())
728732
}
@@ -749,7 +753,11 @@ impl From<IndexAlgo<'_>> for RawIndexAlgorithm {
749753
pub fn register_reducer<'a, A: Args<'a>, I: FnInfo<Invoke = ReducerFn>>(_: impl Reducer<'a, A>) {
750754
register_describer(|module| {
751755
let params = A::schema::<I>(&mut module.inner);
752-
module.inner.add_reducer(I::NAME, params, I::LIFECYCLE);
756+
if let Some(lifecycle) = I::LIFECYCLE {
757+
module.inner.add_lifecycle_reducer(lifecycle, I::NAME, params);
758+
} else {
759+
module.inner.add_reducer(I::NAME, params);
760+
}
753761
module.reducers.push(I::INVOKE);
754762
})
755763
}
@@ -805,16 +813,14 @@ where
805813

806814
/// Registers a row-level security policy.
807815
pub fn register_row_level_security(sql: &'static str) {
808-
register_describer(|module| {
809-
module.inner.add_row_level_security(sql);
810-
})
816+
panic!("row-level security is not supported anymore");
811817
}
812818

813819
/// A builder for a module.
814820
#[derive(Default)]
815821
pub struct ModuleBuilder {
816822
/// The module definition.
817-
inner: RawModuleDefV9Builder,
823+
inner: RawModuleDefV10Builder,
818824
/// The reducers of the module.
819825
reducers: Vec<ReducerFn>,
820826
/// The procedures of the module.
@@ -863,7 +869,7 @@ static ANONYMOUS_VIEWS: OnceLock<Vec<AnonymousFn>> = OnceLock::new();
863869
/// including when modules are updated (re-publishing).
864870
/// After initialization, the module cannot alter the schema.
865871
#[no_mangle]
866-
extern "C" fn __describe_module__(description: BytesSink) {
872+
extern "C" fn __describe_module_v10__(description: BytesSink) {
867873
// Collect the `module`.
868874
let mut module = ModuleBuilder::default();
869875
for describer in &mut *DESCRIBERS.lock().unwrap() {
@@ -872,7 +878,7 @@ extern "C" fn __describe_module__(description: BytesSink) {
872878

873879
// Serialize the module to bsatn.
874880
let module_def = module.inner.finish();
875-
let module_def = RawModuleDef::V9(module_def);
881+
let module_def = RawModuleDef::V10(module_def);
876882
let bytes = bsatn::to_vec(&module_def).expect("unable to serialize typespace");
877883

878884
// Write the sets of reducers, procedures and views.

0 commit comments

Comments
 (0)