Skip to content

Commit 59e566d

Browse files
committed
[release/v1.7.0]: Revert "Rust module bindings and macros for defining procedures (#3444)"
This reverts commit dcd8640.
1 parent 48e6689 commit 59e566d

File tree

12 files changed

+78
-661
lines changed

12 files changed

+78
-661
lines changed

crates/bindings-macro/src/lib.rs

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
//
99
// (private documentation for the macro authors is totally fine here and you SHOULD write that!)
1010

11-
mod procedure;
1211
mod reducer;
1312
mod sats;
1413
mod table;
@@ -106,14 +105,6 @@ mod sym {
106105
}
107106
}
108107

109-
#[proc_macro_attribute]
110-
pub fn procedure(args: StdTokenStream, item: StdTokenStream) -> StdTokenStream {
111-
cvt_attr::<ItemFn>(args, item, quote!(), |args, original_function| {
112-
let args = procedure::ProcedureArgs::parse(args)?;
113-
procedure::procedure_impl(args, original_function)
114-
})
115-
}
116-
117108
#[proc_macro_attribute]
118109
pub fn reducer(args: StdTokenStream, item: StdTokenStream) -> StdTokenStream {
119110
cvt_attr::<ItemFn>(args, item, quote!(), |args, original_function| {

crates/bindings-macro/src/procedure.rs

Lines changed: 0 additions & 130 deletions
This file was deleted.

crates/bindings-macro/src/reducer.rs

Lines changed: 14 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use proc_macro2::{Span, TokenStream};
44
use quote::{quote, quote_spanned};
55
use syn::parse::Parser as _;
66
use syn::spanned::Spanned;
7-
use syn::{FnArg, Ident, ItemFn, LitStr, PatType};
7+
use syn::{FnArg, Ident, ItemFn, LitStr};
88

99
#[derive(Default)]
1010
pub(crate) struct ReducerArgs {
@@ -59,50 +59,33 @@ impl ReducerArgs {
5959
}
6060
}
6161

62-
pub(crate) fn assert_only_lifetime_generics(original_function: &ItemFn, function_kind_plural: &str) -> syn::Result<()> {
62+
pub(crate) fn reducer_impl(args: ReducerArgs, original_function: &ItemFn) -> syn::Result<TokenStream> {
63+
let func_name = &original_function.sig.ident;
64+
let vis = &original_function.vis;
65+
66+
let reducer_name = args.name.unwrap_or_else(|| ident_to_litstr(func_name));
67+
6368
for param in &original_function.sig.generics.params {
6469
let err = |msg| syn::Error::new_spanned(param, msg);
6570
match param {
6671
syn::GenericParam::Lifetime(_) => {}
67-
syn::GenericParam::Type(_) => {
68-
return Err(err(format!(
69-
"type parameters are not allowed on {function_kind_plural}"
70-
)))
71-
}
72-
syn::GenericParam::Const(_) => {
73-
return Err(err(format!(
74-
"const parameters are not allowed on {function_kind_plural}"
75-
)))
76-
}
72+
syn::GenericParam::Type(_) => return Err(err("type parameters are not allowed on reducers")),
73+
syn::GenericParam::Const(_) => return Err(err("const parameters are not allowed on reducers")),
7774
}
7875
}
79-
Ok(())
80-
}
8176

82-
/// Extract all function parameters, except for `self` ones that aren't allowed.
83-
pub(crate) fn extract_typed_args(original_function: &ItemFn) -> syn::Result<Vec<&PatType>> {
84-
original_function
77+
let lifecycle = args.lifecycle.iter().filter_map(|lc| lc.to_lifecycle_value());
78+
79+
// Extract all function parameters, except for `self` ones that aren't allowed.
80+
let typed_args = original_function
8581
.sig
8682
.inputs
8783
.iter()
8884
.map(|arg| match arg {
8985
FnArg::Typed(arg) => Ok(arg),
9086
_ => Err(syn::Error::new_spanned(arg, "expected typed argument")),
9187
})
92-
.collect()
93-
}
94-
95-
pub(crate) fn reducer_impl(args: ReducerArgs, original_function: &ItemFn) -> syn::Result<TokenStream> {
96-
let func_name = &original_function.sig.ident;
97-
let vis = &original_function.vis;
98-
99-
let reducer_name = args.name.unwrap_or_else(|| ident_to_litstr(func_name));
100-
101-
assert_only_lifetime_generics(original_function, "reducers")?;
102-
103-
let lifecycle = args.lifecycle.iter().filter_map(|lc| lc.to_lifecycle_value());
104-
105-
let typed_args = extract_typed_args(original_function)?;
88+
.collect::<syn::Result<Vec<_>>>()?;
10689

10790
// Extract all function parameter names.
10891
let opt_arg_names = typed_args.iter().map(|arg| {
@@ -158,8 +141,6 @@ pub(crate) fn reducer_impl(args: ReducerArgs, original_function: &ItemFn) -> syn
158141
#[automatically_derived]
159142
impl spacetimedb::rt::FnInfo for #func_name {
160143
type Invoke = spacetimedb::rt::ReducerFn;
161-
/// The function kind, which will cause scheduled tables to accept reducers.
162-
type FnKind = spacetimedb::rt::FnKindReducer;
163144
const NAME: &'static str = #reducer_name;
164145
#(const LIFECYCLE: Option<spacetimedb::rt::LifecycleReducer> = Some(#lifecycle);)*
165146
const ARG_NAMES: &'static [Option<&'static str>] = &[#(#opt_arg_names),*];

crates/bindings-macro/src/table.rs

Lines changed: 10 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ impl TableAccess {
4040

4141
struct ScheduledArg {
4242
span: Span,
43-
reducer_or_procedure: Path,
43+
reducer: Path,
4444
at: Option<Ident>,
4545
}
4646

@@ -113,7 +113,7 @@ impl TableArgs {
113113
impl ScheduledArg {
114114
fn parse_meta(meta: ParseNestedMeta) -> syn::Result<Self> {
115115
let span = meta.path.span();
116-
let mut reducer_or_procedure = None;
116+
let mut reducer = None;
117117
let mut at = None;
118118

119119
meta.parse_nested_meta(|meta| {
@@ -126,26 +126,16 @@ impl ScheduledArg {
126126
}
127127
})
128128
} else {
129-
check_duplicate_msg(
130-
&reducer_or_procedure,
131-
&meta,
132-
"can only specify one scheduled reducer or procedure",
133-
)?;
134-
reducer_or_procedure = Some(meta.path);
129+
check_duplicate_msg(&reducer, &meta, "can only specify one scheduled reducer")?;
130+
reducer = Some(meta.path);
135131
}
136132
Ok(())
137133
})?;
138134

139-
let reducer_or_procedure = reducer_or_procedure.ok_or_else(|| {
140-
meta.error(
141-
"must specify scheduled reducer or procedure associated with the table: scheduled(function_name)",
142-
)
135+
let reducer = reducer.ok_or_else(|| {
136+
meta.error("must specify scheduled reducer associated with the table: scheduled(reducer_name)")
143137
})?;
144-
Ok(Self {
145-
span,
146-
reducer_or_procedure,
147-
at,
148-
})
138+
Ok(Self { span, reducer, at })
149139
}
150140
}
151141

@@ -828,20 +818,17 @@ pub(crate) fn table_impl(mut args: TableArgs, item: &syn::DeriveInput) -> syn::R
828818
)
829819
})?;
830820

831-
let reducer_or_procedure = &sched.reducer_or_procedure;
821+
let reducer = &sched.reducer;
832822
let scheduled_at_id = scheduled_at_column.index;
833823
let desc = quote!(spacetimedb::table::ScheduleDesc {
834-
reducer_or_procedure_name: <#reducer_or_procedure as spacetimedb::rt::FnInfo>::NAME,
824+
reducer_name: <#reducer as spacetimedb::rt::FnInfo>::NAME,
835825
scheduled_at_column: #scheduled_at_id,
836826
});
837827

838828
let primary_key_ty = primary_key_column.ty;
839829
let scheduled_at_ty = scheduled_at_column.ty;
840830
let typecheck = quote! {
841-
spacetimedb::rt::scheduled_typecheck::<
842-
#original_struct_ident,
843-
<#reducer_or_procedure as spacetimedb::rt::FnInfo>::FnKind,
844-
>(#reducer_or_procedure);
831+
spacetimedb::rt::scheduled_reducer_typecheck::<#original_struct_ident>(#reducer);
845832
spacetimedb::rt::assert_scheduled_table_primary_key::<#primary_key_ty>();
846833
let _ = |x: #scheduled_at_ty| { let _: spacetimedb::ScheduleAt = x; };
847834
};

crates/bindings-macro/src/view.rs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -158,9 +158,6 @@ pub(crate) fn view_impl(_args: ViewArgs, original_function: &ItemFn) -> syn::Res
158158
/// The type of this function
159159
type Invoke = <spacetimedb::rt::ViewKind<#ctx_ty> as spacetimedb::rt::ViewKindTrait>::InvokeFn;
160160

161-
/// The function kind, which will cause scheduled tables to reject views.
162-
type FnKind = spacetimedb::rt::FnKindView;
163-
164161
/// The name of this function
165162
const NAME: &'static str = #view_name;
166163

crates/bindings-sys/src/lib.rs

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1218,11 +1218,3 @@ impl Drop for RowIter {
12181218
}
12191219
}
12201220
}
1221-
1222-
pub mod procedure {
1223-
//! Side-effecting or asynchronous operations which only procedures are allowed to perform.
1224-
#[inline]
1225-
pub fn sleep_until(_wake_at_timestamp: i64) -> i64 {
1226-
todo!("Add `procedure_sleep_until` host function")
1227-
}
1228-
}

0 commit comments

Comments
 (0)