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
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
```

View File

@ -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<u8> {
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")
}
}