mirror of
https://github.com/fluencelabs/aquavm
synced 2024-12-04 23:20:18 +00:00
Bindgen support (#2)
This commit is contained in:
parent
0956f1ab0c
commit
f6541aae32
76
Cargo.lock
generated
76
Cargo.lock
generated
@ -8,9 +8,17 @@ dependencies = [
|
|||||||
"log",
|
"log",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_derive",
|
"serde_derive",
|
||||||
|
"serde_json",
|
||||||
"serde_sexpr",
|
"serde_sexpr",
|
||||||
|
"wasm-bindgen",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "bumpalo"
|
||||||
|
version = "3.4.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "2e8c087f005730276d1096a652e92a8bacee2e2472bcc9715a74d2bec38b5820"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cfg-if"
|
name = "cfg-if"
|
||||||
version = "0.1.10"
|
version = "0.1.10"
|
||||||
@ -20,7 +28,7 @@ checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "fluence"
|
name = "fluence"
|
||||||
version = "0.2.7"
|
version = "0.2.7"
|
||||||
source = "git+https://github.com/fluencelabs/rust-sdk#d63c6e87404348331629ddd4c6fa67d56ddc5924"
|
source = "git+https://github.com/fluencelabs/rust-sdk#e5d564d4a61e203798383b01505ba23e54e71912"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"fluence-sdk-macro",
|
"fluence-sdk-macro",
|
||||||
"fluence-sdk-main",
|
"fluence-sdk-main",
|
||||||
@ -29,7 +37,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "fluence-sdk-macro"
|
name = "fluence-sdk-macro"
|
||||||
version = "0.2.7"
|
version = "0.2.7"
|
||||||
source = "git+https://github.com/fluencelabs/rust-sdk#d63c6e87404348331629ddd4c6fa67d56ddc5924"
|
source = "git+https://github.com/fluencelabs/rust-sdk#e5d564d4a61e203798383b01505ba23e54e71912"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"fluence-sdk-wit",
|
"fluence-sdk-wit",
|
||||||
]
|
]
|
||||||
@ -37,7 +45,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "fluence-sdk-main"
|
name = "fluence-sdk-main"
|
||||||
version = "0.2.7"
|
version = "0.2.7"
|
||||||
source = "git+https://github.com/fluencelabs/rust-sdk#d63c6e87404348331629ddd4c6fa67d56ddc5924"
|
source = "git+https://github.com/fluencelabs/rust-sdk#e5d564d4a61e203798383b01505ba23e54e71912"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"fluence-sdk-macro",
|
"fluence-sdk-macro",
|
||||||
"log",
|
"log",
|
||||||
@ -47,7 +55,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "fluence-sdk-wit"
|
name = "fluence-sdk-wit"
|
||||||
version = "0.2.7"
|
version = "0.2.7"
|
||||||
source = "git+https://github.com/fluencelabs/rust-sdk#d63c6e87404348331629ddd4c6fa67d56ddc5924"
|
source = "git+https://github.com/fluencelabs/rust-sdk#e5d564d4a61e203798383b01505ba23e54e71912"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
@ -74,6 +82,12 @@ version = "0.4.6"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "dc6f3ad7b9d11a0c00842ff8de1b60ee58661048eb8049ed33c73594f359d7e6"
|
checksum = "dc6f3ad7b9d11a0c00842ff8de1b60ee58661048eb8049ed33c73594f359d7e6"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "lazy_static"
|
||||||
|
version = "1.4.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libc"
|
name = "libc"
|
||||||
version = "0.2.77"
|
version = "0.2.77"
|
||||||
@ -254,3 +268,57 @@ name = "wasi"
|
|||||||
version = "0.9.0+wasi-snapshot-preview1"
|
version = "0.9.0+wasi-snapshot-preview1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
|
checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "wasm-bindgen"
|
||||||
|
version = "0.2.68"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "1ac64ead5ea5f05873d7c12b545865ca2b8d28adfc50a49b84770a3a97265d42"
|
||||||
|
dependencies = [
|
||||||
|
"cfg-if",
|
||||||
|
"wasm-bindgen-macro",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "wasm-bindgen-backend"
|
||||||
|
version = "0.2.68"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f22b422e2a757c35a73774860af8e112bff612ce6cb604224e8e47641a9e4f68"
|
||||||
|
dependencies = [
|
||||||
|
"bumpalo",
|
||||||
|
"lazy_static",
|
||||||
|
"log",
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
"wasm-bindgen-shared",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "wasm-bindgen-macro"
|
||||||
|
version = "0.2.68"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "6b13312a745c08c469f0b292dd2fcd6411dba5f7160f593da6ef69b64e407038"
|
||||||
|
dependencies = [
|
||||||
|
"quote",
|
||||||
|
"wasm-bindgen-macro-support",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "wasm-bindgen-macro-support"
|
||||||
|
version = "0.2.68"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f249f06ef7ee334cc3b8ff031bfc11ec99d00f34d86da7498396dc1e3b1498fe"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
"wasm-bindgen-backend",
|
||||||
|
"wasm-bindgen-shared",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "wasm-bindgen-shared"
|
||||||
|
version = "0.2.68"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "1d649a3145108d7d3fbcde896a468d1bd636791823c9921135218ad89be08307"
|
||||||
|
@ -4,6 +4,9 @@ version = "0.1.0"
|
|||||||
authors = ["Fluence Labs"]
|
authors = ["Fluence Labs"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
|
|
||||||
|
[lib]
|
||||||
|
crate-type = ["cdylib"]
|
||||||
|
|
||||||
[[bin]]
|
[[bin]]
|
||||||
name = "aquamarine"
|
name = "aquamarine"
|
||||||
path = "src/main.rs"
|
path = "src/main.rs"
|
||||||
@ -18,3 +21,5 @@ serde = { version = "1.0.116", features = ["derive"] }
|
|||||||
serde_derive = "1.0.116"
|
serde_derive = "1.0.116"
|
||||||
serde_sexpr = "0.1.0"
|
serde_sexpr = "0.1.0"
|
||||||
log = "0.4.11"
|
log = "0.4.11"
|
||||||
|
serde_json = "1.0"
|
||||||
|
wasm-bindgen = "0.2.68"
|
||||||
|
30
src/execution.rs
Normal file
30
src/execution.rs
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
use crate::instructions::Instruction;
|
||||||
|
use crate::stepper_outcome::StepperOutcome;
|
||||||
|
|
||||||
|
pub fn exec(init_user_id: String, aqua: String, data: String) -> StepperOutcome {
|
||||||
|
log::info!(
|
||||||
|
"stepper invoked with user_id = {}, aqua = {:?}, data = {:?}",
|
||||||
|
init_user_id,
|
||||||
|
aqua,
|
||||||
|
data
|
||||||
|
);
|
||||||
|
|
||||||
|
let outcome = StepperOutcome {
|
||||||
|
data,
|
||||||
|
next_peer_pks: vec![init_user_id],
|
||||||
|
};
|
||||||
|
|
||||||
|
let parsed_aqua = match serde_sexpr::from_str::<Vec<Instruction>>(&aqua) {
|
||||||
|
Ok(parsed) => parsed,
|
||||||
|
Err(e) => {
|
||||||
|
log::error!("supplied aqua script can't be parsed: {:?}", e);
|
||||||
|
|
||||||
|
return outcome;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
log::info!("parsed_aqua: {:?}", parsed_aqua);
|
||||||
|
|
||||||
|
crate::stepper::execute(parsed_aqua);
|
||||||
|
|
||||||
|
outcome
|
||||||
|
}
|
@ -39,7 +39,7 @@ pub(crate) enum Instruction {
|
|||||||
impl ExecutableInstruction for Instruction {
|
impl ExecutableInstruction for Instruction {
|
||||||
fn execute(self, data: &mut HashMap<String, Vec<u8>, RandomState>) {
|
fn execute(self, data: &mut HashMap<String, Vec<u8>, RandomState>) {
|
||||||
match self {
|
match self {
|
||||||
Instruction::Null => {},
|
Instruction::Null => {}
|
||||||
Instruction::Call(call) => call.execute(data),
|
Instruction::Call(call) => call.execute(data),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
40
src/lib.rs
Normal file
40
src/lib.rs
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2020 Fluence Labs Limited
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
mod air;
|
||||||
|
mod execution;
|
||||||
|
mod instructions;
|
||||||
|
mod stepper;
|
||||||
|
mod stepper_outcome;
|
||||||
|
|
||||||
|
use crate::execution::exec;
|
||||||
|
use wasm_bindgen::prelude::*;
|
||||||
|
|
||||||
|
#[wasm_bindgen]
|
||||||
|
pub fn invoke(init_user_id: String, aqua: String, data: String) -> String {
|
||||||
|
let outcome = exec(init_user_id, aqua, data);
|
||||||
|
serde_json::to_string(&outcome).unwrap()
|
||||||
|
}
|
||||||
|
|
||||||
|
#[wasm_bindgen]
|
||||||
|
extern "C" {
|
||||||
|
#[wasm_bindgen(js_namespace = console)]
|
||||||
|
fn log(s: &str);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[wasm_bindgen(raw_module = "../src/call_service.ts")]
|
||||||
|
extern "C" {
|
||||||
|
pub fn call_service(service_id: String, fn_name: String, args: String) -> String;
|
||||||
|
}
|
32
src/main.rs
32
src/main.rs
@ -14,13 +14,13 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
mod air;
|
mod air;
|
||||||
|
mod execution;
|
||||||
mod instructions;
|
mod instructions;
|
||||||
mod stepper;
|
mod stepper;
|
||||||
mod stepper_outcome;
|
mod stepper_outcome;
|
||||||
|
|
||||||
use instructions::Instruction;
|
use crate::execution::exec;
|
||||||
use stepper_outcome::StepperOutcome;
|
use crate::stepper_outcome::StepperOutcome;
|
||||||
|
|
||||||
use fluence::fce;
|
use fluence::fce;
|
||||||
|
|
||||||
pub fn main() {
|
pub fn main() {
|
||||||
@ -29,31 +29,7 @@ pub fn main() {
|
|||||||
|
|
||||||
#[fce]
|
#[fce]
|
||||||
pub fn invoke(init_user_id: String, aqua: String, data: String) -> StepperOutcome {
|
pub fn invoke(init_user_id: String, aqua: String, data: String) -> StepperOutcome {
|
||||||
log::info!(
|
exec(init_user_id, aqua, data)
|
||||||
"stepper invoked with user_id = {}, aqua = {:?}, data = {:?}",
|
|
||||||
init_user_id,
|
|
||||||
aqua,
|
|
||||||
data
|
|
||||||
);
|
|
||||||
|
|
||||||
let outcome = StepperOutcome {
|
|
||||||
data,
|
|
||||||
next_peer_pks: vec![init_user_id],
|
|
||||||
};
|
|
||||||
|
|
||||||
let parsed_aqua = match serde_sexpr::from_str::<Vec<Instruction>>(&aqua) {
|
|
||||||
Ok(parsed) => parsed,
|
|
||||||
Err(e) => {
|
|
||||||
log::error!("supplied aqua script can't be parsed: {:?}", e);
|
|
||||||
|
|
||||||
return outcome;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
log::info!("parsed_aqua: {:?}", parsed_aqua);
|
|
||||||
|
|
||||||
crate::stepper::execute(parsed_aqua);
|
|
||||||
|
|
||||||
outcome
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[fce]
|
#[fce]
|
||||||
|
@ -14,8 +14,7 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
use crate::Instruction;
|
use crate::instructions::Instruction;
|
||||||
|
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
|
||||||
pub(crate) trait ExecutableInstruction {
|
pub(crate) trait ExecutableInstruction {
|
||||||
|
@ -15,8 +15,10 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
use fluence::fce;
|
use fluence::fce;
|
||||||
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
#[fce]
|
#[fce]
|
||||||
|
#[derive(Serialize, Deserialize)]
|
||||||
pub struct StepperOutcome {
|
pub struct StepperOutcome {
|
||||||
pub data: String,
|
pub data: String,
|
||||||
pub next_peer_pks: Vec<String>,
|
pub next_peer_pks: Vec<String>,
|
||||||
|
Loading…
Reference in New Issue
Block a user