This commit is contained in:
vms 2020-04-29 19:40:36 +03:00
parent 082cf3b6dd
commit f87bf3d991
2 changed files with 24 additions and 30 deletions

View File

@ -15,32 +15,32 @@ cargo build --release --target wasm32-unknown-unknown
# How to run # 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: Then run fce and at first load sqlite and redis and only then this example:
```bush ```bush
$> Welcome to the Frank CLI: Welcome to the FCE CLI:
$> >> add redis redis.wasm >> add redis redis.wasm
$> module successfully registered in Frank module successfully registered in FCE
$> >> add sqlite sqlite3.wasm >> add sqlite sqlite3.wasm
$> module successfully registered in Frank module successfully registered in FCE
$> >> add mm mm.wasm >> add mm mm.wasm
$> module successfully registered in Frank module successfully registered in FCE
``` ```
Finally, you could execute requests inside FCE CLI: Finally, you could execute requests inside FCE CLI:
```bush ```bush
$> >> execute redis SET A 1 >> execute mm redis SET A 1
result: +OK result: +OK
$> >> execute redis GET A >> execute mm redis GET A
result: $1 result: $1
1 1
$> >> execute sqlite CREATE VIRTUAL TABLE users USING FTS5(body) >> execute mm sqlite CREATE VIRTUAL TABLE users USING FTS5(body)
result: OK 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 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 result: AB|BC
``` ```

View File

@ -1,27 +1,21 @@
use fluence::sdk::*; use fluence::sdk::*;
const REDIS_OPTION_KEYWORD: &str = "redis";
const SQLITE_OPTION_KEYWORD: &str = "sqlite";
fn init() { fn init() {
logger::WasmLogger::init_with_level(log::Level::Info).unwrap(); logger::WasmLogger::init_with_level(log::Level::Info).unwrap();
} }
#[invocation_handler(init_fn = init, side_modules = (redis, sqlite))] #[invocation_handler(init_fn = init, side_modules = (redis, sqlite))]
fn run(arg: String) -> Vec<u8> { fn run(arg: String) -> Vec<u8> {
let cmd: Vec<_> = arg.split(" ").collect(); if arg.starts_with(REDIS_OPTION_KEYWORD) {
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"); log::info!("calling redis");
redis::call(arg.as_bytes()) redis::call(arg[REDIS_OPTION_KEYWORD.len() + 1..].as_bytes())
}, } else if arg.starts_with(SQLITE_OPTION_KEYWORD) {
"sqlite" => {
log::info!("calling sqlite"); log::info!("calling sqlite");
sqlite::call(arg.as_bytes()) redis::call(arg[SQLITE_OPTION_KEYWORD.len() + 1..].as_bytes())
}, } else {
_ => "unknown_command".as_bytes().to_vec(), Vec::from("unknown command")
} }
} }