diff --git a/README.md b/README.md index 9d8474f..a4983f5 100644 --- a/README.md +++ b/README.md @@ -15,32 +15,32 @@ cargo build --release --target wasm32-unknown-unknown # How to run -To run this example you need FCE and [Redis](https://github.com/fluencelabs/redis/releases/download/0.8.0_w/redis.wasm) and [SQlite](https://github.com/fluencelabs/sqlite/releases/download/0.4.0_w/sqlite3.wasm) wasm binaries. +To run this example you need FCE, [Redis](https://github.com/fluencelabs/redis/releases/download/0.8.0_w/redis.wasm), [SQlite](https://github.com/fluencelabs/sqlite/releases/download/0.4.0_w/sqlite3.wasm) wasm binaries. Then run fce and at first load sqlite and redis and only then this example: ```bush -$> Welcome to the Frank CLI: -$> >> add redis redis.wasm -$> module successfully registered in Frank -$> >> add sqlite sqlite3.wasm -$> module successfully registered in Frank -$> >> add mm mm.wasm -$> module successfully registered in Frank +Welcome to the FCE CLI: +>> add redis redis.wasm +module successfully registered in FCE +>> add sqlite sqlite3.wasm +module successfully registered in FCE +>> add mm mm.wasm +module successfully registered in FCE ``` Finally, you could execute requests inside FCE CLI: ```bush -$> >> execute redis SET A 1 +>> execute mm redis SET A 1 result: +OK -$> >> execute redis GET A +>> execute mm redis GET A result: $1 1 -$> >> execute sqlite CREATE VIRTUAL TABLE users USING FTS5(body) +>> execute mm sqlite CREATE VIRTUAL TABLE users USING FTS5(body) result: OK -$> >> execute sqlite INSERT INTO users(body) VALUES('AB'), ('BC'), ('CD'), ('DE') +>> execute mm sqlite INSERT INTO users(body) VALUES('AB'), ('BC'), ('CD'), ('DE') result: OK -$> >> execute sqlite SELECT * FROM users WHERE users MATCH 'A* OR B*' +>> execute mm sqlite SELECT * FROM users WHERE users MATCH 'A* OR B*' result: AB|BC ``` diff --git a/src/lib.rs b/src/lib.rs index ba13a66..a785744 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,27 +1,21 @@ use fluence::sdk::*; +const REDIS_OPTION_KEYWORD: &str = "redis"; +const SQLITE_OPTION_KEYWORD: &str = "sqlite"; + fn init() { logger::WasmLogger::init_with_level(log::Level::Info).unwrap(); } #[invocation_handler(init_fn = init, side_modules = (redis, sqlite))] fn run(arg: String) -> Vec { - let cmd: Vec<_> = arg.split(" ").collect(); - if cmd.len() < 2 { - return "please specify module and argument".as_bytes().to_vec(); - } - - let arg = cmd[1..].join(" "); - - match cmd[0] { - "redis" => { - log::info!("calling redis"); - redis::call(arg.as_bytes()) - }, - "sqlite" => { - log::info!("calling sqlite"); - sqlite::call(arg.as_bytes()) - }, - _ => "unknown_command".as_bytes().to_vec(), + if arg.starts_with(REDIS_OPTION_KEYWORD) { + log::info!("calling redis"); + redis::call(arg[REDIS_OPTION_KEYWORD.len() + 1..].as_bytes()) + } else if arg.starts_with(SQLITE_OPTION_KEYWORD) { + log::info!("calling sqlite"); + redis::call(arg[SQLITE_OPTION_KEYWORD.len() + 1..].as_bytes()) + } else { + Vec::from("unknown command") } }