sqlsync-reducer 0.3.2

SQLSync is a collaborative offline-first wrapper around SQLite. A SQLSync Reducer is responsible for executing mutations on the database both locally and on the server.
Documentation
// build guest.wasm using: `cargo build --target wasm32-unknown-unknown --example guest`

use serde::{Deserialize, Serialize};
use sqlsync_reducer::{execute, init_reducer, query, types::ReducerError};

#[derive(Serialize, Deserialize, Debug)]
enum Mutation {
    Set(String, String),
    Delete(String),
}

async fn reducer(mutation: Vec<u8>) -> Result<(), ReducerError> {
    let mutation: Mutation = bincode::deserialize(&mutation)?;

    log::info!("received mutation: {:?}", mutation);

    log::info!("running query and execute at the same time");

    let x: Option<i64> = None;
    let query_future = query!("SELECT * FROM foo WHERE bar = ?", "baz", 1, 1.23, x);
    let exec_future = execute!("SELECT * FROM foo WHERE bar = ?", "baz");

    let (result, result2) = futures::join!(query_future, exec_future);

    log::info!("query result: {:?}", result);
    log::info!("exec result: {:?}", result2);

    log::info!("running another query");

    let query_future = query!("SELECT * FROM foo WHERE bar = ?", "baz");

    let result = execute!("SELECT * FROM foo WHERE bar = ?", "baz").await;
    log::info!("result: {:?}", result);

    let result = query_future.await;
    log::info!("final query result: {:?}", result);

    if let Err(err) = execute!("FAIL").await {
        log::info!("received expected error: {:?}", err);
    } else {
        panic!("failed to receive expected error");
    }

    log::info!("make sure we can resume queries after an error");
    let result = execute!("SELECT * FROM foo WHERE bar = ?", "baz").await;
    log::info!("result: {:?}", result);

    Ok(())
}

init_reducer!(reducer);