@@ -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}
@@ -895,6 +902,18 @@ pub(crate) fn table_impl(mut args: TableArgs, item: &syn::DeriveInput) -> syn::R
895902 ) ;
896903
897904 let table_access = args. access . iter ( ) . map ( |acc| acc. to_value ( ) ) ;
905+ let is_event = args. event . iter ( ) . map ( |_| {
906+ quote ! (
907+ const IS_EVENT : bool = true ;
908+ )
909+ } ) ;
910+ let can_be_lookup_impl = if args. event . is_none ( ) {
911+ quote ! {
912+ impl spacetimedb:: query_builder:: CanBeLookupTable for #original_struct_ident { }
913+ }
914+ } else {
915+ quote ! { }
916+ } ;
898917 let unique_col_ids = unique_columns. iter ( ) . map ( |col| col. index ) ;
899918 let primary_col_id = primary_key_column. clone ( ) . into_iter ( ) . map ( |col| col. index ) ;
900919 let sequence_col_ids = sequenced_columns. iter ( ) . map ( |col| col. index ) ;
@@ -1020,6 +1039,7 @@ pub(crate) fn table_impl(mut args: TableArgs, item: &syn::DeriveInput) -> syn::R
10201039 const TABLE_NAME : & ' static str = #table_name;
10211040 // the default value if not specified is Private
10221041 #( const TABLE_ACCESS : spacetimedb:: table:: TableAccess = #table_access; ) *
1042+ #( #is_event) *
10231043 const UNIQUE_COLUMNS : & ' static [ u16 ] = & [ #( #unique_col_ids) , * ] ;
10241044 const INDEXES : & ' static [ spacetimedb:: table:: IndexDesc <' static >] = & [ #( #index_descs) , * ] ;
10251045 #( const PRIMARY_KEY : Option <u16 > = Some ( #primary_col_id) ; ) *
@@ -1133,6 +1153,8 @@ pub(crate) fn table_impl(mut args: TableArgs, item: &syn::DeriveInput) -> syn::R
11331153 }
11341154 }
11351155
1156+ #can_be_lookup_impl
1157+
11361158 } ;
11371159
11381160 let table_query_handle_def = quote ! {
0 commit comments