// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE // WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. // This was generated using spacetimedb cli version 1.11.3 (commit 02449737ca3b29e7e39679fccbef541a50f32094). #![allow(unused, clippy::all)] use spacetimedb_sdk::__codegen::{self as __sdk, __lib, __sats, __ws}; pub mod add_bot_reducer; pub mod advance_state_timer_table; pub mod advance_state_timer_type; pub mod bot_table; pub mod bot_type; pub mod clear_all_reducer; pub mod db_tile_type; pub mod db_wall_type; pub mod discard_tile_reducer; pub mod dragon_type; pub mod draw_tile_reducer; pub mod game_state_type; pub mod join_or_create_lobby_reducer; pub mod lobby_table; pub mod lobby_type; pub mod login_or_add_player_reducer; pub mod player_or_bot_type; pub mod player_table; pub mod player_type; pub mod rank_type; pub mod set_ready_reducer; pub mod shuffle_deal_reducer; pub mod skip_call_reducer; pub mod start_game_reducer; pub mod suit_type; pub mod tile_table; pub mod tile_type; pub mod turn_state_type; pub mod wall_table; pub mod wind_type; pub use add_bot_reducer::{add_bot, set_flags_for_add_bot, AddBotCallbackId}; pub use advance_state_timer_table::*; pub use advance_state_timer_type::AdvanceStateTimer; pub use bot_table::*; pub use bot_type::Bot; pub use clear_all_reducer::{clear_all, set_flags_for_clear_all, ClearAllCallbackId}; pub use db_tile_type::DbTile; pub use db_wall_type::DbWall; pub use discard_tile_reducer::{discard_tile, set_flags_for_discard_tile, DiscardTileCallbackId}; pub use dragon_type::Dragon; pub use draw_tile_reducer::{draw_tile, set_flags_for_draw_tile, DrawTileCallbackId}; pub use game_state_type::GameState; pub use join_or_create_lobby_reducer::{ join_or_create_lobby, set_flags_for_join_or_create_lobby, JoinOrCreateLobbyCallbackId, }; pub use lobby_table::*; pub use lobby_type::Lobby; pub use login_or_add_player_reducer::{ login_or_add_player, set_flags_for_login_or_add_player, LoginOrAddPlayerCallbackId, }; pub use player_or_bot_type::PlayerOrBot; pub use player_table::*; pub use player_type::Player; pub use rank_type::Rank; pub use set_ready_reducer::{set_flags_for_set_ready, set_ready, SetReadyCallbackId}; pub use shuffle_deal_reducer::{set_flags_for_shuffle_deal, shuffle_deal, ShuffleDealCallbackId}; pub use skip_call_reducer::{set_flags_for_skip_call, skip_call, SkipCallCallbackId}; pub use start_game_reducer::{set_flags_for_start_game, start_game, StartGameCallbackId}; pub use suit_type::Suit; pub use tile_table::*; pub use tile_type::Tile; pub use turn_state_type::TurnState; pub use wall_table::*; pub use wind_type::Wind; #[derive(Clone, PartialEq, Debug)] /// One of the reducers defined by this module. /// /// Contained within a [`__sdk::ReducerEvent`] in [`EventContext`]s for reducer events /// to indicate which reducer caused the event. pub enum Reducer { AddBot { lobby_id: u32 }, ClearAll, DiscardTile { tile_id: u32 }, DrawTile, JoinOrCreateLobby { lobby_id: u32 }, LoginOrAddPlayer, SetReady { ready: bool }, ShuffleDeal { lobby_id: u32 }, SkipCall, StartGame, } impl __sdk::InModule for Reducer { type Module = RemoteModule; } impl __sdk::Reducer for Reducer { fn reducer_name(&self) -> &'static str { match self { Reducer::AddBot { .. } => "add_bot", Reducer::ClearAll => "clear_all", Reducer::DiscardTile { .. } => "discard_tile", Reducer::DrawTile => "draw_tile", Reducer::JoinOrCreateLobby { .. } => "join_or_create_lobby", Reducer::LoginOrAddPlayer => "login_or_add_player", Reducer::SetReady { .. } => "set_ready", Reducer::ShuffleDeal { .. } => "shuffle_deal", Reducer::SkipCall => "skip_call", Reducer::StartGame => "start_game", _ => unreachable!(), } } } impl TryFrom<__ws::ReducerCallInfo<__ws::BsatnFormat>> for Reducer { type Error = __sdk::Error; fn try_from(value: __ws::ReducerCallInfo<__ws::BsatnFormat>) -> __sdk::Result { match &value.reducer_name[..] { "add_bot" => Ok(__sdk::parse_reducer_args::( "add_bot", &value.args, )? .into()), "clear_all" => Ok( __sdk::parse_reducer_args::( "clear_all", &value.args, )? .into(), ), "discard_tile" => Ok( __sdk::parse_reducer_args::( "discard_tile", &value.args, )? .into(), ), "draw_tile" => Ok( __sdk::parse_reducer_args::( "draw_tile", &value.args, )? .into(), ), "join_or_create_lobby" => Ok(__sdk::parse_reducer_args::< join_or_create_lobby_reducer::JoinOrCreateLobbyArgs, >("join_or_create_lobby", &value.args)? .into()), "login_or_add_player" => Ok(__sdk::parse_reducer_args::< login_or_add_player_reducer::LoginOrAddPlayerArgs, >("login_or_add_player", &value.args)? .into()), "set_ready" => Ok( __sdk::parse_reducer_args::( "set_ready", &value.args, )? .into(), ), "shuffle_deal" => Ok( __sdk::parse_reducer_args::( "shuffle_deal", &value.args, )? .into(), ), "skip_call" => Ok( __sdk::parse_reducer_args::( "skip_call", &value.args, )? .into(), ), "start_game" => Ok( __sdk::parse_reducer_args::( "start_game", &value.args, )? .into(), ), unknown => { Err( __sdk::InternalError::unknown_name("reducer", unknown, "ReducerCallInfo") .into(), ) } } } } #[derive(Default)] #[allow(non_snake_case)] #[doc(hidden)] pub struct DbUpdate { advance_state_timer: __sdk::TableUpdate, bot: __sdk::TableUpdate, lobby: __sdk::TableUpdate, player: __sdk::TableUpdate, tile: __sdk::TableUpdate, wall: __sdk::TableUpdate, } impl TryFrom<__ws::DatabaseUpdate<__ws::BsatnFormat>> for DbUpdate { type Error = __sdk::Error; fn try_from(raw: __ws::DatabaseUpdate<__ws::BsatnFormat>) -> Result { let mut db_update = DbUpdate::default(); for table_update in raw.tables { match &table_update.table_name[..] { "advance_state_timer" => db_update .advance_state_timer .append(advance_state_timer_table::parse_table_update(table_update)?), "bot" => db_update .bot .append(bot_table::parse_table_update(table_update)?), "lobby" => db_update .lobby .append(lobby_table::parse_table_update(table_update)?), "player" => db_update .player .append(player_table::parse_table_update(table_update)?), "tile" => db_update .tile .append(tile_table::parse_table_update(table_update)?), "wall" => db_update .wall .append(wall_table::parse_table_update(table_update)?), unknown => { return Err(__sdk::InternalError::unknown_name( "table", unknown, "DatabaseUpdate", ) .into()); } } } Ok(db_update) } } impl __sdk::InModule for DbUpdate { type Module = RemoteModule; } impl __sdk::DbUpdate for DbUpdate { fn apply_to_client_cache( &self, cache: &mut __sdk::ClientCache, ) -> AppliedDiff<'_> { let mut diff = AppliedDiff::default(); diff.advance_state_timer = cache .apply_diff_to_table::( "advance_state_timer", &self.advance_state_timer, ) .with_updates_by_pk(|row| &row.scheduled_id); diff.bot = cache .apply_diff_to_table::("bot", &self.bot) .with_updates_by_pk(|row| &row.id); diff.lobby = cache .apply_diff_to_table::("lobby", &self.lobby) .with_updates_by_pk(|row| &row.id); diff.player = cache .apply_diff_to_table::("player", &self.player) .with_updates_by_pk(|row| &row.identity); diff.tile = cache .apply_diff_to_table::("tile", &self.tile) .with_updates_by_pk(|row| &row.id); diff.wall = cache .apply_diff_to_table::("wall", &self.wall) .with_updates_by_pk(|row| &row.lobby_id); diff } } #[derive(Default)] #[allow(non_snake_case)] #[doc(hidden)] pub struct AppliedDiff<'r> { advance_state_timer: __sdk::TableAppliedDiff<'r, AdvanceStateTimer>, bot: __sdk::TableAppliedDiff<'r, Bot>, lobby: __sdk::TableAppliedDiff<'r, Lobby>, player: __sdk::TableAppliedDiff<'r, Player>, tile: __sdk::TableAppliedDiff<'r, DbTile>, wall: __sdk::TableAppliedDiff<'r, DbWall>, __unused: std::marker::PhantomData<&'r ()>, } impl __sdk::InModule for AppliedDiff<'_> { type Module = RemoteModule; } impl<'r> __sdk::AppliedDiff<'r> for AppliedDiff<'r> { fn invoke_row_callbacks( &self, event: &EventContext, callbacks: &mut __sdk::DbCallbacks, ) { callbacks.invoke_table_row_callbacks::( "advance_state_timer", &self.advance_state_timer, event, ); callbacks.invoke_table_row_callbacks::("bot", &self.bot, event); callbacks.invoke_table_row_callbacks::("lobby", &self.lobby, event); callbacks.invoke_table_row_callbacks::("player", &self.player, event); callbacks.invoke_table_row_callbacks::("tile", &self.tile, event); callbacks.invoke_table_row_callbacks::("wall", &self.wall, event); } } #[doc(hidden)] pub struct RemoteModule; impl __sdk::InModule for RemoteModule { type Module = Self; } /// The `reducers` field of [`EventContext`] and [`DbConnection`], /// with methods provided by extension traits for each reducer defined by the module. pub struct RemoteReducers { imp: __sdk::DbContextImpl, } impl __sdk::InModule for RemoteReducers { type Module = RemoteModule; } /// The `procedures` field of [`DbConnection`] and other [`DbContext`] types, /// with methods provided by extension traits for each procedure defined by the module. pub struct RemoteProcedures { imp: __sdk::DbContextImpl, } impl __sdk::InModule for RemoteProcedures { type Module = RemoteModule; } #[doc(hidden)] /// The `set_reducer_flags` field of [`DbConnection`], /// with methods provided by extension traits for each reducer defined by the module. /// Each method sets the flags for the reducer with the same name. /// /// This type is currently unstable and may be removed without a major version bump. pub struct SetReducerFlags { imp: __sdk::DbContextImpl, } impl __sdk::InModule for SetReducerFlags { type Module = RemoteModule; } /// The `db` field of [`EventContext`] and [`DbConnection`], /// with methods provided by extension traits for each table defined by the module. pub struct RemoteTables { imp: __sdk::DbContextImpl, } impl __sdk::InModule for RemoteTables { type Module = RemoteModule; } /// A connection to a remote module, including a materialized view of a subset of the database. /// /// Connect to a remote module by calling [`DbConnection::builder`] /// and using the [`__sdk::DbConnectionBuilder`] builder-pattern constructor. /// /// You must explicitly advance the connection by calling any one of: /// /// - [`DbConnection::frame_tick`]. /// - [`DbConnection::run_threaded`]. /// - [`DbConnection::run_async`]. /// - [`DbConnection::advance_one_message`]. /// - [`DbConnection::advance_one_message_blocking`]. /// - [`DbConnection::advance_one_message_async`]. /// /// Which of these methods you should call depends on the specific needs of your application, /// but you must call one of them, or else the connection will never progress. pub struct DbConnection { /// Access to tables defined by the module via extension traits implemented for [`RemoteTables`]. pub db: RemoteTables, /// Access to reducers defined by the module via extension traits implemented for [`RemoteReducers`]. pub reducers: RemoteReducers, #[doc(hidden)] /// Access to setting the call-flags of each reducer defined for each reducer defined by the module /// via extension traits implemented for [`SetReducerFlags`]. /// /// This type is currently unstable and may be removed without a major version bump. pub set_reducer_flags: SetReducerFlags, /// Access to procedures defined by the module via extension traits implemented for [`RemoteProcedures`]. pub procedures: RemoteProcedures, imp: __sdk::DbContextImpl, } impl __sdk::InModule for DbConnection { type Module = RemoteModule; } impl __sdk::DbContext for DbConnection { type DbView = RemoteTables; type Reducers = RemoteReducers; type Procedures = RemoteProcedures; type SetReducerFlags = SetReducerFlags; fn db(&self) -> &Self::DbView { &self.db } fn reducers(&self) -> &Self::Reducers { &self.reducers } fn procedures(&self) -> &Self::Procedures { &self.procedures } fn set_reducer_flags(&self) -> &Self::SetReducerFlags { &self.set_reducer_flags } fn is_active(&self) -> bool { self.imp.is_active() } fn disconnect(&self) -> __sdk::Result<()> { self.imp.disconnect() } type SubscriptionBuilder = __sdk::SubscriptionBuilder; fn subscription_builder(&self) -> Self::SubscriptionBuilder { __sdk::SubscriptionBuilder::new(&self.imp) } fn try_identity(&self) -> Option<__sdk::Identity> { self.imp.try_identity() } fn connection_id(&self) -> __sdk::ConnectionId { self.imp.connection_id() } fn try_connection_id(&self) -> Option<__sdk::ConnectionId> { self.imp.try_connection_id() } } impl DbConnection { /// Builder-pattern constructor for a connection to a remote module. /// /// See [`__sdk::DbConnectionBuilder`] for required and optional configuration for the new connection. pub fn builder() -> __sdk::DbConnectionBuilder { __sdk::DbConnectionBuilder::new() } /// If any WebSocket messages are waiting, process one of them. /// /// Returns `true` if a message was processed, or `false` if the queue is empty. /// Callers should invoke this message in a loop until it returns `false` /// or for as much time is available to process messages. /// /// Returns an error if the connection is disconnected. /// If the disconnection in question was normal, /// i.e. the result of a call to [`__sdk::DbContext::disconnect`], /// the returned error will be downcastable to [`__sdk::DisconnectedError`]. /// /// This is a low-level primitive exposed for power users who need significant control over scheduling. /// Most applications should call [`Self::frame_tick`] each frame /// to fully exhaust the queue whenever time is available. pub fn advance_one_message(&self) -> __sdk::Result { self.imp.advance_one_message() } /// Process one WebSocket message, potentially blocking the current thread until one is received. /// /// Returns an error if the connection is disconnected. /// If the disconnection in question was normal, /// i.e. the result of a call to [`__sdk::DbContext::disconnect`], /// the returned error will be downcastable to [`__sdk::DisconnectedError`]. /// /// This is a low-level primitive exposed for power users who need significant control over scheduling. /// Most applications should call [`Self::run_threaded`] to spawn a thread /// which advances the connection automatically. pub fn advance_one_message_blocking(&self) -> __sdk::Result<()> { self.imp.advance_one_message_blocking() } /// Process one WebSocket message, `await`ing until one is received. /// /// Returns an error if the connection is disconnected. /// If the disconnection in question was normal, /// i.e. the result of a call to [`__sdk::DbContext::disconnect`], /// the returned error will be downcastable to [`__sdk::DisconnectedError`]. /// /// This is a low-level primitive exposed for power users who need significant control over scheduling. /// Most applications should call [`Self::run_async`] to run an `async` loop /// which advances the connection when polled. pub async fn advance_one_message_async(&self) -> __sdk::Result<()> { self.imp.advance_one_message_async().await } /// Process all WebSocket messages waiting in the queue, /// then return without `await`ing or blocking the current thread. pub fn frame_tick(&self) -> __sdk::Result<()> { self.imp.frame_tick() } /// Spawn a thread which processes WebSocket messages as they are received. pub fn run_threaded(&self) -> std::thread::JoinHandle<()> { self.imp.run_threaded() } /// Run an `async` loop which processes WebSocket messages when polled. pub async fn run_async(&self) -> __sdk::Result<()> { self.imp.run_async().await } } impl __sdk::DbConnection for DbConnection { fn new(imp: __sdk::DbContextImpl) -> Self { Self { db: RemoteTables { imp: imp.clone() }, reducers: RemoteReducers { imp: imp.clone() }, procedures: RemoteProcedures { imp: imp.clone() }, set_reducer_flags: SetReducerFlags { imp: imp.clone() }, imp, } } } /// A handle on a subscribed query. // TODO: Document this better after implementing the new subscription API. #[derive(Clone)] pub struct SubscriptionHandle { imp: __sdk::SubscriptionHandleImpl, } impl __sdk::InModule for SubscriptionHandle { type Module = RemoteModule; } impl __sdk::SubscriptionHandle for SubscriptionHandle { fn new(imp: __sdk::SubscriptionHandleImpl) -> Self { Self { imp } } /// Returns true if this subscription has been terminated due to an unsubscribe call or an error. fn is_ended(&self) -> bool { self.imp.is_ended() } /// Returns true if this subscription has been applied and has not yet been unsubscribed. fn is_active(&self) -> bool { self.imp.is_active() } /// Unsubscribe from the query controlled by this `SubscriptionHandle`, /// then run `on_end` when its rows are removed from the client cache. fn unsubscribe_then(self, on_end: __sdk::OnEndedCallback) -> __sdk::Result<()> { self.imp.unsubscribe_then(Some(on_end)) } fn unsubscribe(self) -> __sdk::Result<()> { self.imp.unsubscribe_then(None) } } /// Alias trait for a [`__sdk::DbContext`] connected to this module, /// with that trait's associated types bounded to this module's concrete types. /// /// Users can use this trait as a boundary on definitions which should accept /// either a [`DbConnection`] or an [`EventContext`] and operate on either. pub trait RemoteDbContext: __sdk::DbContext< DbView = RemoteTables, Reducers = RemoteReducers, SetReducerFlags = SetReducerFlags, SubscriptionBuilder = __sdk::SubscriptionBuilder, > { } impl< Ctx: __sdk::DbContext< DbView = RemoteTables, Reducers = RemoteReducers, SetReducerFlags = SetReducerFlags, SubscriptionBuilder = __sdk::SubscriptionBuilder, >, > RemoteDbContext for Ctx { } /// An [`__sdk::DbContext`] augmented with a [`__sdk::Event`], /// passed to [`__sdk::Table::on_insert`], [`__sdk::Table::on_delete`] and [`__sdk::TableWithPrimaryKey::on_update`] callbacks. pub struct EventContext { /// Access to tables defined by the module via extension traits implemented for [`RemoteTables`]. pub db: RemoteTables, /// Access to reducers defined by the module via extension traits implemented for [`RemoteReducers`]. pub reducers: RemoteReducers, /// Access to setting the call-flags of each reducer defined for each reducer defined by the module /// via extension traits implemented for [`SetReducerFlags`]. /// /// This type is currently unstable and may be removed without a major version bump. pub set_reducer_flags: SetReducerFlags, /// Access to procedures defined by the module via extension traits implemented for [`RemoteProcedures`]. pub procedures: RemoteProcedures, /// The event which caused these callbacks to run. pub event: __sdk::Event, imp: __sdk::DbContextImpl, } impl __sdk::AbstractEventContext for EventContext { type Event = __sdk::Event; fn event(&self) -> &Self::Event { &self.event } fn new(imp: __sdk::DbContextImpl, event: Self::Event) -> Self { Self { db: RemoteTables { imp: imp.clone() }, reducers: RemoteReducers { imp: imp.clone() }, set_reducer_flags: SetReducerFlags { imp: imp.clone() }, procedures: RemoteProcedures { imp: imp.clone() }, event, imp, } } } impl __sdk::InModule for EventContext { type Module = RemoteModule; } impl __sdk::DbContext for EventContext { type DbView = RemoteTables; type Reducers = RemoteReducers; type Procedures = RemoteProcedures; type SetReducerFlags = SetReducerFlags; fn db(&self) -> &Self::DbView { &self.db } fn reducers(&self) -> &Self::Reducers { &self.reducers } fn procedures(&self) -> &Self::Procedures { &self.procedures } fn set_reducer_flags(&self) -> &Self::SetReducerFlags { &self.set_reducer_flags } fn is_active(&self) -> bool { self.imp.is_active() } fn disconnect(&self) -> __sdk::Result<()> { self.imp.disconnect() } type SubscriptionBuilder = __sdk::SubscriptionBuilder; fn subscription_builder(&self) -> Self::SubscriptionBuilder { __sdk::SubscriptionBuilder::new(&self.imp) } fn try_identity(&self) -> Option<__sdk::Identity> { self.imp.try_identity() } fn connection_id(&self) -> __sdk::ConnectionId { self.imp.connection_id() } fn try_connection_id(&self) -> Option<__sdk::ConnectionId> { self.imp.try_connection_id() } } impl __sdk::EventContext for EventContext {} /// An [`__sdk::DbContext`] augmented with a [`__sdk::ReducerEvent`], /// passed to on-reducer callbacks. pub struct ReducerEventContext { /// Access to tables defined by the module via extension traits implemented for [`RemoteTables`]. pub db: RemoteTables, /// Access to reducers defined by the module via extension traits implemented for [`RemoteReducers`]. pub reducers: RemoteReducers, /// Access to setting the call-flags of each reducer defined for each reducer defined by the module /// via extension traits implemented for [`SetReducerFlags`]. /// /// This type is currently unstable and may be removed without a major version bump. pub set_reducer_flags: SetReducerFlags, /// Access to procedures defined by the module via extension traits implemented for [`RemoteProcedures`]. pub procedures: RemoteProcedures, /// The event which caused these callbacks to run. pub event: __sdk::ReducerEvent, imp: __sdk::DbContextImpl, } impl __sdk::AbstractEventContext for ReducerEventContext { type Event = __sdk::ReducerEvent; fn event(&self) -> &Self::Event { &self.event } fn new(imp: __sdk::DbContextImpl, event: Self::Event) -> Self { Self { db: RemoteTables { imp: imp.clone() }, reducers: RemoteReducers { imp: imp.clone() }, set_reducer_flags: SetReducerFlags { imp: imp.clone() }, procedures: RemoteProcedures { imp: imp.clone() }, event, imp, } } } impl __sdk::InModule for ReducerEventContext { type Module = RemoteModule; } impl __sdk::DbContext for ReducerEventContext { type DbView = RemoteTables; type Reducers = RemoteReducers; type Procedures = RemoteProcedures; type SetReducerFlags = SetReducerFlags; fn db(&self) -> &Self::DbView { &self.db } fn reducers(&self) -> &Self::Reducers { &self.reducers } fn procedures(&self) -> &Self::Procedures { &self.procedures } fn set_reducer_flags(&self) -> &Self::SetReducerFlags { &self.set_reducer_flags } fn is_active(&self) -> bool { self.imp.is_active() } fn disconnect(&self) -> __sdk::Result<()> { self.imp.disconnect() } type SubscriptionBuilder = __sdk::SubscriptionBuilder; fn subscription_builder(&self) -> Self::SubscriptionBuilder { __sdk::SubscriptionBuilder::new(&self.imp) } fn try_identity(&self) -> Option<__sdk::Identity> { self.imp.try_identity() } fn connection_id(&self) -> __sdk::ConnectionId { self.imp.connection_id() } fn try_connection_id(&self) -> Option<__sdk::ConnectionId> { self.imp.try_connection_id() } } impl __sdk::ReducerEventContext for ReducerEventContext {} /// An [`__sdk::DbContext`] passed to procedure callbacks. pub struct ProcedureEventContext { /// Access to tables defined by the module via extension traits implemented for [`RemoteTables`]. pub db: RemoteTables, /// Access to reducers defined by the module via extension traits implemented for [`RemoteReducers`]. pub reducers: RemoteReducers, /// Access to setting the call-flags of each reducer defined for each reducer defined by the module /// via extension traits implemented for [`SetReducerFlags`]. /// /// This type is currently unstable and may be removed without a major version bump. pub set_reducer_flags: SetReducerFlags, /// Access to procedures defined by the module via extension traits implemented for [`RemoteProcedures`]. pub procedures: RemoteProcedures, imp: __sdk::DbContextImpl, } impl __sdk::AbstractEventContext for ProcedureEventContext { type Event = (); fn event(&self) -> &Self::Event { &() } fn new(imp: __sdk::DbContextImpl, _event: Self::Event) -> Self { Self { db: RemoteTables { imp: imp.clone() }, reducers: RemoteReducers { imp: imp.clone() }, procedures: RemoteProcedures { imp: imp.clone() }, set_reducer_flags: SetReducerFlags { imp: imp.clone() }, imp, } } } impl __sdk::InModule for ProcedureEventContext { type Module = RemoteModule; } impl __sdk::DbContext for ProcedureEventContext { type DbView = RemoteTables; type Reducers = RemoteReducers; type Procedures = RemoteProcedures; type SetReducerFlags = SetReducerFlags; fn db(&self) -> &Self::DbView { &self.db } fn reducers(&self) -> &Self::Reducers { &self.reducers } fn procedures(&self) -> &Self::Procedures { &self.procedures } fn set_reducer_flags(&self) -> &Self::SetReducerFlags { &self.set_reducer_flags } fn is_active(&self) -> bool { self.imp.is_active() } fn disconnect(&self) -> __sdk::Result<()> { self.imp.disconnect() } type SubscriptionBuilder = __sdk::SubscriptionBuilder; fn subscription_builder(&self) -> Self::SubscriptionBuilder { __sdk::SubscriptionBuilder::new(&self.imp) } fn try_identity(&self) -> Option<__sdk::Identity> { self.imp.try_identity() } fn connection_id(&self) -> __sdk::ConnectionId { self.imp.connection_id() } fn try_connection_id(&self) -> Option<__sdk::ConnectionId> { self.imp.try_connection_id() } } impl __sdk::ProcedureEventContext for ProcedureEventContext {} /// An [`__sdk::DbContext`] passed to [`__sdk::SubscriptionBuilder::on_applied`] and [`SubscriptionHandle::unsubscribe_then`] callbacks. pub struct SubscriptionEventContext { /// Access to tables defined by the module via extension traits implemented for [`RemoteTables`]. pub db: RemoteTables, /// Access to reducers defined by the module via extension traits implemented for [`RemoteReducers`]. pub reducers: RemoteReducers, /// Access to setting the call-flags of each reducer defined for each reducer defined by the module /// via extension traits implemented for [`SetReducerFlags`]. /// /// This type is currently unstable and may be removed without a major version bump. pub set_reducer_flags: SetReducerFlags, /// Access to procedures defined by the module via extension traits implemented for [`RemoteProcedures`]. pub procedures: RemoteProcedures, imp: __sdk::DbContextImpl, } impl __sdk::AbstractEventContext for SubscriptionEventContext { type Event = (); fn event(&self) -> &Self::Event { &() } fn new(imp: __sdk::DbContextImpl, _event: Self::Event) -> Self { Self { db: RemoteTables { imp: imp.clone() }, reducers: RemoteReducers { imp: imp.clone() }, procedures: RemoteProcedures { imp: imp.clone() }, set_reducer_flags: SetReducerFlags { imp: imp.clone() }, imp, } } } impl __sdk::InModule for SubscriptionEventContext { type Module = RemoteModule; } impl __sdk::DbContext for SubscriptionEventContext { type DbView = RemoteTables; type Reducers = RemoteReducers; type Procedures = RemoteProcedures; type SetReducerFlags = SetReducerFlags; fn db(&self) -> &Self::DbView { &self.db } fn reducers(&self) -> &Self::Reducers { &self.reducers } fn procedures(&self) -> &Self::Procedures { &self.procedures } fn set_reducer_flags(&self) -> &Self::SetReducerFlags { &self.set_reducer_flags } fn is_active(&self) -> bool { self.imp.is_active() } fn disconnect(&self) -> __sdk::Result<()> { self.imp.disconnect() } type SubscriptionBuilder = __sdk::SubscriptionBuilder; fn subscription_builder(&self) -> Self::SubscriptionBuilder { __sdk::SubscriptionBuilder::new(&self.imp) } fn try_identity(&self) -> Option<__sdk::Identity> { self.imp.try_identity() } fn connection_id(&self) -> __sdk::ConnectionId { self.imp.connection_id() } fn try_connection_id(&self) -> Option<__sdk::ConnectionId> { self.imp.try_connection_id() } } impl __sdk::SubscriptionEventContext for SubscriptionEventContext {} /// An [`__sdk::DbContext`] augmented with a [`__sdk::Error`], /// passed to [`__sdk::DbConnectionBuilder::on_disconnect`], [`__sdk::DbConnectionBuilder::on_connect_error`] and [`__sdk::SubscriptionBuilder::on_error`] callbacks. pub struct ErrorContext { /// Access to tables defined by the module via extension traits implemented for [`RemoteTables`]. pub db: RemoteTables, /// Access to reducers defined by the module via extension traits implemented for [`RemoteReducers`]. pub reducers: RemoteReducers, /// Access to setting the call-flags of each reducer defined for each reducer defined by the module /// via extension traits implemented for [`SetReducerFlags`]. /// /// This type is currently unstable and may be removed without a major version bump. pub set_reducer_flags: SetReducerFlags, /// Access to procedures defined by the module via extension traits implemented for [`RemoteProcedures`]. pub procedures: RemoteProcedures, /// The event which caused these callbacks to run. pub event: Option<__sdk::Error>, imp: __sdk::DbContextImpl, } impl __sdk::AbstractEventContext for ErrorContext { type Event = Option<__sdk::Error>; fn event(&self) -> &Self::Event { &self.event } fn new(imp: __sdk::DbContextImpl, event: Self::Event) -> Self { Self { db: RemoteTables { imp: imp.clone() }, reducers: RemoteReducers { imp: imp.clone() }, set_reducer_flags: SetReducerFlags { imp: imp.clone() }, procedures: RemoteProcedures { imp: imp.clone() }, event, imp, } } } impl __sdk::InModule for ErrorContext { type Module = RemoteModule; } impl __sdk::DbContext for ErrorContext { type DbView = RemoteTables; type Reducers = RemoteReducers; type Procedures = RemoteProcedures; type SetReducerFlags = SetReducerFlags; fn db(&self) -> &Self::DbView { &self.db } fn reducers(&self) -> &Self::Reducers { &self.reducers } fn procedures(&self) -> &Self::Procedures { &self.procedures } fn set_reducer_flags(&self) -> &Self::SetReducerFlags { &self.set_reducer_flags } fn is_active(&self) -> bool { self.imp.is_active() } fn disconnect(&self) -> __sdk::Result<()> { self.imp.disconnect() } type SubscriptionBuilder = __sdk::SubscriptionBuilder; fn subscription_builder(&self) -> Self::SubscriptionBuilder { __sdk::SubscriptionBuilder::new(&self.imp) } fn try_identity(&self) -> Option<__sdk::Identity> { self.imp.try_identity() } fn connection_id(&self) -> __sdk::ConnectionId { self.imp.connection_id() } fn try_connection_id(&self) -> Option<__sdk::ConnectionId> { self.imp.try_connection_id() } } impl __sdk::ErrorContext for ErrorContext {} impl __sdk::SpacetimeModule for RemoteModule { type DbConnection = DbConnection; type EventContext = EventContext; type ReducerEventContext = ReducerEventContext; type ProcedureEventContext = ProcedureEventContext; type SubscriptionEventContext = SubscriptionEventContext; type ErrorContext = ErrorContext; type Reducer = Reducer; type DbView = RemoteTables; type Reducers = RemoteReducers; type SetReducerFlags = SetReducerFlags; type DbUpdate = DbUpdate; type AppliedDiff<'r> = AppliedDiff<'r>; type SubscriptionHandle = SubscriptionHandle; fn register_tables(client_cache: &mut __sdk::ClientCache) { advance_state_timer_table::register_table(client_cache); bot_table::register_table(client_cache); lobby_table::register_table(client_cache); player_table::register_table(client_cache); tile_table::register_table(client_cache); wall_table::register_table(client_cache); } }