feat(workspace): initialize all seven crates with stubs and blank Bevy window
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,12 @@
|
||||
// TODO (Phase: Android) — implement JNI bindings here.
|
||||
//
|
||||
// Steps:
|
||||
// 1. Add `jni` dependency under [target.'cfg(target_os = "android")'.dependencies]
|
||||
// 2. Implement GpgsClient using cargo-mobile2 JNI bridge
|
||||
// 3. pull(): call PlayGames.getSnapshotsClient().open("solitaire_quest_sync")
|
||||
// -> deserialize JSON blob into SyncPayload
|
||||
// 4. push(): serialize SyncPayload to JSON -> write to Saved Game slot
|
||||
// 5. mirror_achievement(id): call PlayGames.getAchievementsClient().unlock(map_id(id))
|
||||
// 6. Maintain a static ID mapping: our &str IDs -> GPGS achievement IDs (from Play Console)
|
||||
// 7. On GameWonEvent, submit score to GPGS leaderboard
|
||||
// 8. Add Google Sign-In button to Settings screen (Android build only, #[cfg] gated)
|
||||
@@ -0,0 +1,11 @@
|
||||
#[cfg(target_os = "android")]
|
||||
mod android;
|
||||
|
||||
#[cfg(not(target_os = "android"))]
|
||||
mod stub;
|
||||
|
||||
#[cfg(not(target_os = "android"))]
|
||||
pub use stub::GpgsClient;
|
||||
|
||||
#[cfg(target_os = "android")]
|
||||
pub use android::GpgsClient;
|
||||
@@ -0,0 +1,38 @@
|
||||
use async_trait::async_trait;
|
||||
use solitaire_data::{SyncError, SyncProvider};
|
||||
use solitaire_sync::{SyncPayload, SyncResponse};
|
||||
|
||||
/// Desktop/iOS stub — always returns UnsupportedPlatform.
|
||||
/// Real implementation lives in android.rs (Phase: Android).
|
||||
pub struct GpgsClient;
|
||||
|
||||
impl GpgsClient {
|
||||
pub fn new() -> Self {
|
||||
Self
|
||||
}
|
||||
}
|
||||
|
||||
impl Default for GpgsClient {
|
||||
fn default() -> Self {
|
||||
Self::new()
|
||||
}
|
||||
}
|
||||
|
||||
#[async_trait]
|
||||
impl SyncProvider for GpgsClient {
|
||||
async fn pull(&self) -> Result<SyncPayload, SyncError> {
|
||||
Err(SyncError::UnsupportedPlatform)
|
||||
}
|
||||
|
||||
async fn push(&self, _payload: &SyncPayload) -> Result<SyncResponse, SyncError> {
|
||||
Err(SyncError::UnsupportedPlatform)
|
||||
}
|
||||
|
||||
fn backend_name(&self) -> &'static str {
|
||||
"Google Play Games (unavailable on this platform)"
|
||||
}
|
||||
|
||||
fn is_authenticated(&self) -> bool {
|
||||
false
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user