@@ -21,6 +21,7 @@ pub(crate) struct TableArgs {
2121 scheduled : Option < ScheduledArg > ,
2222 accessor : Ident ,
2323 indices : Vec < IndexArg > ,
24+ event : Option < Span > ,
2425}
2526
2627enum TableAccess {
@@ -81,6 +82,7 @@ impl TableArgs {
8182 let mut accessor = None ;
8283 let mut name = None ;
8384 let mut indices = Vec :: new ( ) ;
85+ let mut event = None ;
8486 syn:: meta:: parser ( |meta| {
8587 match_meta ! ( match meta {
8688 sym:: public => {
@@ -106,6 +108,10 @@ impl TableArgs {
106108 check_duplicate( & scheduled, & meta) ?;
107109 scheduled = Some ( ScheduledArg :: parse_meta( meta) ?) ;
108110 }
111+ sym:: event => {
112+ check_duplicate( & event, & meta) ?;
113+ event = Some ( meta. path. span( ) ) ;
114+ }
109115 } ) ;
110116 Ok ( ( ) )
111117 } )
@@ -123,6 +129,7 @@ impl TableArgs {
123129 accessor,
124130 indices,
125131 name,
132+ event,
126133 } )
127134 }
128135}
@@ -877,6 +884,18 @@ pub(crate) fn table_impl(mut args: TableArgs, item: &syn::DeriveInput) -> syn::R
877884 ) ;
878885
879886 let table_access = args. access . iter ( ) . map ( |acc| acc. to_value ( ) ) ;
887+ let is_event = args. event . iter ( ) . map ( |_| {
888+ quote ! (
889+ const IS_EVENT : bool = true ;
890+ )
891+ } ) ;
892+ let can_be_lookup_impl = if args. event . is_none ( ) {
893+ quote ! {
894+ impl spacetimedb:: query_builder:: CanBeLookupTable for #original_struct_ident { }
895+ }
896+ } else {
897+ quote ! { }
898+ } ;
880899 let unique_col_ids = unique_columns. iter ( ) . map ( |col| col. index ) ;
881900 let primary_col_id = primary_key_column. clone ( ) . into_iter ( ) . map ( |col| col. index ) ;
882901 let sequence_col_ids = sequenced_columns. iter ( ) . map ( |col| col. index ) ;
@@ -1002,6 +1021,7 @@ pub(crate) fn table_impl(mut args: TableArgs, item: &syn::DeriveInput) -> syn::R
10021021 const TABLE_NAME : & ' static str = #table_name;
10031022 // the default value if not specified is Private
10041023 #( const TABLE_ACCESS : spacetimedb:: table:: TableAccess = #table_access; ) *
1024+ #( #is_event) *
10051025 const UNIQUE_COLUMNS : & ' static [ u16 ] = & [ #( #unique_col_ids) , * ] ;
10061026 const INDEXES : & ' static [ spacetimedb:: table:: IndexDesc <' static >] = & [ #( #index_descs) , * ] ;
10071027 #( const PRIMARY_KEY : Option <u16 > = Some ( #primary_col_id) ; ) *
@@ -1118,6 +1138,8 @@ pub(crate) fn table_impl(mut args: TableArgs, item: &syn::DeriveInput) -> syn::R
11181138 }
11191139 }
11201140
1141+ #can_be_lookup_impl
1142+
11211143 } ;
11221144
11231145 let table_query_handle_def = quote ! {
0 commit comments