state advancer reducer

This commit is contained in:
Tao Tien 2026-02-20 15:36:04 -08:00
parent c12667938e
commit e2c9c815ec
44 changed files with 2063 additions and 773 deletions

View file

@ -4,73 +4,80 @@
// 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};
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 game_timer_type;
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 player_clock_type;
pub mod player_hand_type;
pub mod player_or_bot_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 mod add_bot_reducer;
pub mod advance_game_reducer;
pub mod clear_all_reducer;
pub mod connect_reducer;
pub mod discard_tile_reducer;
pub mod disconnect_reducer;
pub mod join_or_create_lobby_reducer;
pub mod set_ready_reducer;
pub mod bot_table;
pub mod game_timer_table;
pub mod lobby_table;
pub mod logged_out_player_table;
pub mod player_table;
pub mod player_clock_table;
pub mod player_hand_table;
pub mod tile_table;
pub mod wall_table;
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 game_timer_type::GameTimer;
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 player_clock_type::PlayerClock;
pub use player_hand_type::PlayerHand;
pub use player_or_bot_type::PlayerOrBot;
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;
pub use bot_table::*;
pub use game_timer_table::*;
pub use lobby_table::*;
pub use logged_out_player_table::*;
pub use player_table::*;
pub use player_clock_table::*;
pub use player_hand_table::*;
pub use tile_table::*;
pub use wall_table::*;
pub use add_bot_reducer::{add_bot, set_flags_for_add_bot, AddBotCallbackId};
pub use advance_game_reducer::{advance_game, set_flags_for_advance_game, AdvanceGameCallbackId};
pub use clear_all_reducer::{clear_all, set_flags_for_clear_all, ClearAllCallbackId};
pub use connect_reducer::{connect, set_flags_for_connect, ConnectCallbackId};
pub use discard_tile_reducer::{discard_tile, set_flags_for_discard_tile, DiscardTileCallbackId};
pub use disconnect_reducer::{disconnect, set_flags_for_disconnect, DisconnectCallbackId};
pub use join_or_create_lobby_reducer::{join_or_create_lobby, set_flags_for_join_or_create_lobby, JoinOrCreateLobbyCallbackId};
pub use set_ready_reducer::{set_ready, set_flags_for_set_ready, SetReadyCallbackId};
#[derive(Clone, PartialEq, Debug)]
@ -80,18 +87,27 @@ pub use wind_type::Wind;
/// 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,
AddBot {
lobby_id: u32,
} ,
AdvanceGame {
game_timer: GameTimer,
} ,
ClearAll ,
Connect ,
DiscardTile {
tile_id: u32,
} ,
Disconnect ,
JoinOrCreateLobby {
lobby_id: u32,
} ,
SetReady {
ready: bool,
} ,
}
impl __sdk::InModule for Reducer {
type Module = RemoteModule;
}
@ -99,140 +115,74 @@ impl __sdk::InModule for Reducer {
impl __sdk::Reducer for Reducer {
fn reducer_name(&self) -> &'static str {
match self {
Reducer::AddBot { .. } => "add_bot",
Reducer::AddBot { .. } => "add_bot",
Reducer::AdvanceGame { .. } => "advance_game",
Reducer::ClearAll => "clear_all",
Reducer::Connect => "connect",
Reducer::DiscardTile { .. } => "discard_tile",
Reducer::DrawTile => "draw_tile",
Reducer::Disconnect => "disconnect",
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<Self> {
type Error = __sdk::Error;
fn try_from(value: __ws::ReducerCallInfo<__ws::BsatnFormat>) -> __sdk::Result<Self> {
match &value.reducer_name[..] {
"add_bot" => Ok(__sdk::parse_reducer_args::<add_bot_reducer::AddBotArgs>(
"add_bot",
&value.args,
)?
.into()),
"clear_all" => Ok(
__sdk::parse_reducer_args::<clear_all_reducer::ClearAllArgs>(
"clear_all",
&value.args,
)?
.into(),
),
"discard_tile" => Ok(
__sdk::parse_reducer_args::<discard_tile_reducer::DiscardTileArgs>(
"discard_tile",
&value.args,
)?
.into(),
),
"draw_tile" => Ok(
__sdk::parse_reducer_args::<draw_tile_reducer::DrawTileArgs>(
"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_reducer::SetReadyArgs>(
"set_ready",
&value.args,
)?
.into(),
),
"shuffle_deal" => Ok(
__sdk::parse_reducer_args::<shuffle_deal_reducer::ShuffleDealArgs>(
"shuffle_deal",
&value.args,
)?
.into(),
),
"skip_call" => Ok(
__sdk::parse_reducer_args::<skip_call_reducer::SkipCallArgs>(
"skip_call",
&value.args,
)?
.into(),
),
"start_game" => Ok(
__sdk::parse_reducer_args::<start_game_reducer::StartGameArgs>(
"start_game",
&value.args,
)?
.into(),
),
unknown => {
Err(
__sdk::InternalError::unknown_name("reducer", unknown, "ReducerCallInfo")
.into(),
)
}
}
}
"add_bot" => Ok(__sdk::parse_reducer_args::<add_bot_reducer::AddBotArgs>("add_bot", &value.args)?.into()),
"advance_game" => Ok(__sdk::parse_reducer_args::<advance_game_reducer::AdvanceGameArgs>("advance_game", &value.args)?.into()),
"clear_all" => Ok(__sdk::parse_reducer_args::<clear_all_reducer::ClearAllArgs>("clear_all", &value.args)?.into()),
"connect" => Ok(__sdk::parse_reducer_args::<connect_reducer::ConnectArgs>("connect", &value.args)?.into()),
"discard_tile" => Ok(__sdk::parse_reducer_args::<discard_tile_reducer::DiscardTileArgs>("discard_tile", &value.args)?.into()),
"disconnect" => Ok(__sdk::parse_reducer_args::<disconnect_reducer::DisconnectArgs>("disconnect", &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()),
"set_ready" => Ok(__sdk::parse_reducer_args::<set_ready_reducer::SetReadyArgs>("set_ready", &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<AdvanceStateTimer>,
bot: __sdk::TableUpdate<Bot>,
bot: __sdk::TableUpdate<Bot>,
game_timer: __sdk::TableUpdate<GameTimer>,
lobby: __sdk::TableUpdate<Lobby>,
logged_out_player: __sdk::TableUpdate<Player>,
player: __sdk::TableUpdate<Player>,
player_clock: __sdk::TableUpdate<PlayerClock>,
player_hand: __sdk::TableUpdate<PlayerHand>,
tile: __sdk::TableUpdate<DbTile>,
wall: __sdk::TableUpdate<DbWall>,
}
impl TryFrom<__ws::DatabaseUpdate<__ws::BsatnFormat>> for DbUpdate {
type Error = __sdk::Error;
fn try_from(raw: __ws::DatabaseUpdate<__ws::BsatnFormat>) -> Result<Self, Self::Error> {
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)?),
"bot" => db_update.bot.append(bot_table::parse_table_update(table_update)?),
"game_timer" => db_update.game_timer.append(game_timer_table::parse_table_update(table_update)?),
"lobby" => db_update.lobby.append(lobby_table::parse_table_update(table_update)?),
"logged_out_player" => db_update.logged_out_player.append(logged_out_player_table::parse_table_update(table_update)?),
"player" => db_update.player.append(player_table::parse_table_update(table_update)?),
"player_clock" => db_update.player_clock.append(player_clock_table::parse_table_update(table_update)?),
"player_hand" => db_update.player_hand.append(player_hand_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());
).into());
}
}
}
@ -245,73 +195,58 @@ impl __sdk::InModule for DbUpdate {
}
impl __sdk::DbUpdate for DbUpdate {
fn apply_to_client_cache(
&self,
cache: &mut __sdk::ClientCache<RemoteModule>,
) -> AppliedDiff<'_> {
let mut diff = AppliedDiff::default();
fn apply_to_client_cache(&self, cache: &mut __sdk::ClientCache<RemoteModule>) -> AppliedDiff<'_> {
let mut diff = AppliedDiff::default();
diff.bot = cache.apply_diff_to_table::<Bot>("bot", &self.bot).with_updates_by_pk(|row| &row.id);
diff.game_timer = cache.apply_diff_to_table::<GameTimer>("game_timer", &self.game_timer).with_updates_by_pk(|row| &row.id);
diff.lobby = cache.apply_diff_to_table::<Lobby>("lobby", &self.lobby).with_updates_by_pk(|row| &row.id);
diff.logged_out_player = cache.apply_diff_to_table::<Player>("logged_out_player", &self.logged_out_player).with_updates_by_pk(|row| &row.identity);
diff.player = cache.apply_diff_to_table::<Player>("player", &self.player).with_updates_by_pk(|row| &row.identity);
diff.player_clock = cache.apply_diff_to_table::<PlayerClock>("player_clock", &self.player_clock).with_updates_by_pk(|row| &row.id);
diff.player_hand = cache.apply_diff_to_table::<PlayerHand>("player_hand", &self.player_hand).with_updates_by_pk(|row| &row.id);
diff.tile = cache.apply_diff_to_table::<DbTile>("tile", &self.tile).with_updates_by_pk(|row| &row.id);
diff.wall = cache.apply_diff_to_table::<DbWall>("wall", &self.wall).with_updates_by_pk(|row| &row.lobby_id);
diff.advance_state_timer = cache
.apply_diff_to_table::<AdvanceStateTimer>(
"advance_state_timer",
&self.advance_state_timer,
)
.with_updates_by_pk(|row| &row.scheduled_id);
diff.bot = cache
.apply_diff_to_table::<Bot>("bot", &self.bot)
.with_updates_by_pk(|row| &row.id);
diff.lobby = cache
.apply_diff_to_table::<Lobby>("lobby", &self.lobby)
.with_updates_by_pk(|row| &row.id);
diff.player = cache
.apply_diff_to_table::<Player>("player", &self.player)
.with_updates_by_pk(|row| &row.identity);
diff.tile = cache
.apply_diff_to_table::<DbTile>("tile", &self.tile)
.with_updates_by_pk(|row| &row.id);
diff.wall = cache
.apply_diff_to_table::<DbWall>("wall", &self.wall)
.with_updates_by_pk(|row| &row.lobby_id);
diff
}
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>,
bot: __sdk::TableAppliedDiff<'r, Bot>,
game_timer: __sdk::TableAppliedDiff<'r, GameTimer>,
lobby: __sdk::TableAppliedDiff<'r, Lobby>,
logged_out_player: __sdk::TableAppliedDiff<'r, Player>,
player: __sdk::TableAppliedDiff<'r, Player>,
player_clock: __sdk::TableAppliedDiff<'r, PlayerClock>,
player_hand: __sdk::TableAppliedDiff<'r, PlayerHand>,
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<RemoteModule>,
) {
callbacks.invoke_table_row_callbacks::<AdvanceStateTimer>(
"advance_state_timer",
&self.advance_state_timer,
event,
);
callbacks.invoke_table_row_callbacks::<Bot>("bot", &self.bot, event);
fn invoke_row_callbacks(&self, event: &EventContext, callbacks: &mut __sdk::DbCallbacks<RemoteModule>) {
callbacks.invoke_table_row_callbacks::<Bot>("bot", &self.bot, event);
callbacks.invoke_table_row_callbacks::<GameTimer>("game_timer", &self.game_timer, event);
callbacks.invoke_table_row_callbacks::<Lobby>("lobby", &self.lobby, event);
callbacks.invoke_table_row_callbacks::<Player>("logged_out_player", &self.logged_out_player, event);
callbacks.invoke_table_row_callbacks::<Player>("player", &self.player, event);
callbacks.invoke_table_row_callbacks::<PlayerClock>("player_clock", &self.player_clock, event);
callbacks.invoke_table_row_callbacks::<PlayerHand>("player_hand", &self.player_hand, event);
callbacks.invoke_table_row_callbacks::<DbTile>("tile", &self.tile, event);
callbacks.invoke_table_row_callbacks::<DbWall>("wall", &self.wall, event);
}
}
}
#[doc(hidden)]
pub struct RemoteModule;
@ -564,6 +499,7 @@ impl __sdk::SubscriptionHandle for SubscriptionHandle {
fn unsubscribe(self) -> __sdk::Result<()> {
self.imp.unsubscribe_then(None)
}
}
/// Alias trait for a [`__sdk::DbContext`] connected to this module,
@ -571,25 +507,19 @@ impl __sdk::SubscriptionHandle for SubscriptionHandle {
///
/// 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<
pub trait RemoteDbContext: __sdk::DbContext<
DbView = RemoteTables,
Reducers = RemoteReducers,
SetReducerFlags = SetReducerFlags,
SubscriptionBuilder = __sdk::SubscriptionBuilder<RemoteModule>,
>
{
}
impl<
Ctx: __sdk::DbContext<
DbView = RemoteTables,
Reducers = RemoteReducers,
SetReducerFlags = SetReducerFlags,
SubscriptionBuilder = __sdk::SubscriptionBuilder<RemoteModule>,
>,
> RemoteDbContext for Ctx
{
}
> {}
impl<Ctx: __sdk::DbContext<
DbView = RemoteTables,
Reducers = RemoteReducers,
SetReducerFlags = SetReducerFlags,
SubscriptionBuilder = __sdk::SubscriptionBuilder<RemoteModule>,
>> 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.
@ -1014,6 +944,7 @@ impl __sdk::DbContext for ErrorContext {
impl __sdk::ErrorContext for ErrorContext {}
impl __sdk::SpacetimeModule for RemoteModule {
type DbConnection = DbConnection;
type EventContext = EventContext;
type ReducerEventContext = ReducerEventContext;
@ -1028,12 +959,15 @@ impl __sdk::SpacetimeModule for RemoteModule {
type AppliedDiff<'r> = AppliedDiff<'r>;
type SubscriptionHandle = SubscriptionHandle;
fn register_tables(client_cache: &mut __sdk::ClientCache<Self>) {
advance_state_timer_table::register_table(client_cache);
bot_table::register_table(client_cache);
fn register_tables(client_cache: &mut __sdk::ClientCache<Self>) {
bot_table::register_table(client_cache);
game_timer_table::register_table(client_cache);
lobby_table::register_table(client_cache);
logged_out_player_table::register_table(client_cache);
player_table::register_table(client_cache);
player_clock_table::register_table(client_cache);
player_hand_table::register_table(client_cache);
tile_table::register_table(client_cache);
wall_table::register_table(client_cache);
}
}
}