elura 0.3.0

Rust framework for authoritative realtime gameplay and extensible online game services
Documentation
#![cfg(feature = "world")]

use elura::world::testing::{WorldTestClient, test_identity};
use elura::world::{Route, World, WorldConfig};
use prost::Message;

#[derive(Clone, PartialEq, Message)]
struct Echo {
    #[prost(uint64, tag = "1")]
    sequence: u64,
}

struct EchoRoute;

impl Route for EchoRoute {
    const ID: u32 = 100;
    const NAME: &'static str = "test.echo";

    type Request = Echo;
    type Response = Echo;
}

#[test]
fn facade_exposes_world_unit_testing_types() {
    let client_type: Option<WorldTestClient> = None;
    assert!(client_type.is_none());
    assert_eq!(test_identity(7).user_id, 7);
}

#[tokio::test]
async fn upper_layer_can_run_a_typed_business_test() {
    let harness = World::new(WorldConfig::default())
        .route(EchoRoute, |_context, request| async move { Ok(request) })
        .build()
        .unwrap()
        .harness();
    let client = harness.client(test_identity(1)).unwrap();

    let first = client.call(EchoRoute, Echo { sequence: 1 }).await.unwrap();
    let second = client.call(EchoRoute, Echo { sequence: 2 }).await.unwrap();

    assert_eq!(first.sequence, 1);
    assert_eq!(second.sequence, 2);
    assert_eq!(harness.stats().commands, 2);
}