mirror of
https://github.com/fluencelabs/marine.git
synced 2025-06-21 18:51:37 +00:00
improve getting export record types
This commit is contained in:
8
Cargo.lock
generated
8
Cargo.lock
generated
@ -648,7 +648,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "fce"
|
name = "fce"
|
||||||
version = "0.1.10"
|
version = "0.1.11"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"boolinator",
|
"boolinator",
|
||||||
"bytes",
|
"bytes",
|
||||||
@ -750,7 +750,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "fluence-app-service"
|
name = "fluence-app-service"
|
||||||
version = "0.1.11"
|
version = "0.1.12"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"fluence-faas",
|
"fluence-faas",
|
||||||
"log",
|
"log",
|
||||||
@ -764,7 +764,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "fluence-faas"
|
name = "fluence-faas"
|
||||||
version = "0.1.11"
|
version = "0.1.12"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cmd_lib",
|
"cmd_lib",
|
||||||
"env_logger 0.7.1",
|
"env_logger 0.7.1",
|
||||||
@ -884,7 +884,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "frepl"
|
name = "frepl"
|
||||||
version = "0.1.15"
|
version = "0.1.16"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"clap",
|
"clap",
|
||||||
|
@ -15,7 +15,7 @@ fce-wit-parser = { path = "../wit-parser", version = "0.1.10"}
|
|||||||
fluence-sdk-wit = "0.2.8"
|
fluence-sdk-wit = "0.2.8"
|
||||||
|
|
||||||
walrus = "0.17.0"
|
walrus = "0.17.0"
|
||||||
wasmer-wit = { package = "wasmer-interface-types-fl", version = "=0.17.17" }
|
wasmer-wit = { package = "wasmer-interface-types-fl", version = "0.17.17" }
|
||||||
once_cell = "1.4.0"
|
once_cell = "1.4.0"
|
||||||
serde = { version = "1.0.110", features = ["derive"] }
|
serde = { version = "1.0.110", features = ["derive"] }
|
||||||
serde_json = "1.0.56"
|
serde_json = "1.0.56"
|
||||||
|
@ -11,5 +11,5 @@ name = "fce_wit_interfaces"
|
|||||||
path = "src/lib.rs"
|
path = "src/lib.rs"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
wasmer-wit = { package = "wasmer-interface-types-fl", version = "=0.17.17" }
|
wasmer-wit = { package = "wasmer-interface-types-fl", version = "0.17.17" }
|
||||||
multimap = "0.8.1"
|
multimap = "0.8.1"
|
||||||
|
@ -16,4 +16,4 @@ fce-wit-interfaces = { path = "../wit-interfaces", version = "0.1.8" }
|
|||||||
anyhow = "1.0.31"
|
anyhow = "1.0.31"
|
||||||
walrus = "0.17.0"
|
walrus = "0.17.0"
|
||||||
wasmer-core = { package = "wasmer-runtime-core-fl", version = "0.17.0"}
|
wasmer-core = { package = "wasmer-runtime-core-fl", version = "0.17.0"}
|
||||||
wasmer-wit = { package = "wasmer-interface-types-fl", version = "=0.17.17" }
|
wasmer-wit = { package = "wasmer-interface-types-fl", version = "0.17.17" }
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "fce"
|
name = "fce"
|
||||||
description = "Fluence Compute Engine"
|
description = "Fluence Compute Engine"
|
||||||
version = "0.1.10"
|
version = "0.1.11"
|
||||||
authors = ["Fluence Labs"]
|
authors = ["Fluence Labs"]
|
||||||
license = "Apache-2.0"
|
license = "Apache-2.0"
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
@ -18,7 +18,7 @@ fce-utils = { path = "../crates/utils", version = "0.1.0" }
|
|||||||
wasmer-runtime = { package = "wasmer-runtime-fl", version = "0.17.0" }
|
wasmer-runtime = { package = "wasmer-runtime-fl", version = "0.17.0" }
|
||||||
# dynamicfunc-fat-closures allows using state inside DynamicFunc
|
# dynamicfunc-fat-closures allows using state inside DynamicFunc
|
||||||
wasmer-core = { package = "wasmer-runtime-core-fl", version = "0.17.0", features = ["dynamicfunc-fat-closures"] }
|
wasmer-core = { package = "wasmer-runtime-core-fl", version = "0.17.0", features = ["dynamicfunc-fat-closures"] }
|
||||||
wasmer-wit = { package = "wasmer-interface-types-fl", version = "=0.17.17" }
|
wasmer-wit = { package = "wasmer-interface-types-fl", version = "0.17.17" }
|
||||||
wasmer-wasi = { package = "wasmer-wasi-fl", version = "0.17.0" }
|
wasmer-wasi = { package = "wasmer-wasi-fl", version = "0.17.0" }
|
||||||
|
|
||||||
multimap = "0.8.1"
|
multimap = "0.8.1"
|
||||||
|
@ -439,55 +439,62 @@ impl FCEModule {
|
|||||||
export_funcs: &ExportFunctions,
|
export_funcs: &ExportFunctions,
|
||||||
wit_instance: &Arc<WITInstance>,
|
wit_instance: &Arc<WITInstance>,
|
||||||
) -> Result<RecordTypes> {
|
) -> Result<RecordTypes> {
|
||||||
fn handle_record_type(
|
fn handle_itype(
|
||||||
record_type_id: u64,
|
itype: &IType,
|
||||||
wit_instance: &Arc<WITInstance>,
|
wit_instance: &Arc<WITInstance>,
|
||||||
export_record_types: &mut RecordTypes,
|
export_record_types: &mut RecordTypes,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
use wasmer_wit::interpreter::wasm::structures::Instance;
|
use wasmer_wit::interpreter::wasm::structures::Instance;
|
||||||
|
|
||||||
let record_type = wit_instance
|
fn handle_record_type(
|
||||||
.wit_record_by_id(record_type_id)
|
record_type_id: u64,
|
||||||
.ok_or_else(|| {
|
wit_instance: &Arc<WITInstance>,
|
||||||
FCEError::WasmerResolveError(format!(
|
export_record_types: &mut RecordTypes,
|
||||||
"record type with type id {} not found",
|
) -> Result<()> {
|
||||||
record_type_id
|
let record_type =
|
||||||
))
|
wit_instance
|
||||||
})?;
|
.wit_record_by_id(record_type_id)
|
||||||
export_record_types.insert(record_type_id, record_type.clone());
|
.ok_or_else(|| {
|
||||||
|
FCEError::WasmerResolveError(format!(
|
||||||
|
"record type with type id {} not found",
|
||||||
|
record_type_id
|
||||||
|
))
|
||||||
|
})?;
|
||||||
|
export_record_types.insert(record_type_id, record_type.clone());
|
||||||
|
|
||||||
for field in record_type.fields.iter() {
|
for field in record_type.fields.iter() {
|
||||||
if let IType::Record(record_type_id) = &field.ty {
|
handle_itype(&field.ty, wit_instance, export_record_types)?;
|
||||||
handle_record_type(*record_type_id, wit_instance, export_record_types)?;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
match itype {
|
||||||
|
IType::Record(record_type_id) => {
|
||||||
|
handle_record_type(*record_type_id, wit_instance, export_record_types)?
|
||||||
|
}
|
||||||
|
IType::Array(array_ty) => {
|
||||||
|
handle_itype(array_ty, wit_instance, export_record_types)?
|
||||||
|
}
|
||||||
|
_ => {}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn extract_record_type_from_itype(itype: &IType) -> Option<u64> {
|
|
||||||
match itype {
|
|
||||||
IType::Record(record_id) => Some(*record_id),
|
|
||||||
IType::Array(itype) => extract_record_type_from_itype(itype),
|
|
||||||
_ => None,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let export_record_ids = export_funcs
|
|
||||||
.iter()
|
|
||||||
.flat_map(|(_, ref mut callable)| {
|
|
||||||
callable
|
|
||||||
.wit_module_func
|
|
||||||
.arguments
|
|
||||||
.iter()
|
|
||||||
.map(|arg| &arg.ty)
|
|
||||||
.chain(callable.wit_module_func.output_types.iter())
|
|
||||||
})
|
|
||||||
.filter_map(extract_record_type_from_itype);
|
|
||||||
|
|
||||||
let mut export_record_types = HashMap::new();
|
let mut export_record_types = HashMap::new();
|
||||||
for record_type_id in export_record_ids {
|
|
||||||
handle_record_type(record_type_id, wit_instance, &mut export_record_types)?;
|
let itypes = export_funcs.iter().flat_map(|(_, ref mut callable)| {
|
||||||
|
callable
|
||||||
|
.wit_module_func
|
||||||
|
.arguments
|
||||||
|
.iter()
|
||||||
|
.map(|arg| &arg.ty)
|
||||||
|
.chain(callable.wit_module_func.output_types.iter())
|
||||||
|
});
|
||||||
|
|
||||||
|
for itype in itypes {
|
||||||
|
handle_itype(itype, wit_instance, &mut export_record_types)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(export_record_types)
|
Ok(export_record_types)
|
||||||
|
Binary file not shown.
@ -6,5 +6,5 @@ fce build --release
|
|||||||
|
|
||||||
rm artifacts/*
|
rm artifacts/*
|
||||||
cp ../../target/wasm32-wasi/release/sqlite_test.wasm artifacts/
|
cp ../../target/wasm32-wasi/release/sqlite_test.wasm artifacts/
|
||||||
wget https://github.com/fluencelabs/sqlite/releases/download/v0.7.0_w/sqlite3.wasm
|
wget https://github.com/fluencelabs/sqlite/releases/download/v0.8.0_w/sqlite3.wasm
|
||||||
mv sqlite3.wasm artifacts/
|
mv sqlite3.wasm artifacts/
|
||||||
|
@ -21,7 +21,7 @@ use fce_sqlite_connector::State;
|
|||||||
pub fn main() {}
|
pub fn main() {}
|
||||||
|
|
||||||
#[fce]
|
#[fce]
|
||||||
pub fn test1() {
|
pub fn test1(age: i64) {
|
||||||
let connection = fce_sqlite_connector::open(":memory:").unwrap();
|
let connection = fce_sqlite_connector::open(":memory:").unwrap();
|
||||||
|
|
||||||
connection
|
connection
|
||||||
@ -38,7 +38,7 @@ pub fn test1() {
|
|||||||
.prepare("SELECT * FROM users WHERE age > ?")
|
.prepare("SELECT * FROM users WHERE age > ?")
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
statement.bind(1, 50).unwrap();
|
statement.bind(1, age).unwrap();
|
||||||
|
|
||||||
while let State::Row = statement.next().unwrap() {
|
while let State::Row = statement.next().unwrap() {
|
||||||
println!("name = {}", statement.read::<String>(0).unwrap());
|
println!("name = {}", statement.read::<String>(0).unwrap());
|
||||||
@ -47,7 +47,7 @@ pub fn test1() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[fce]
|
#[fce]
|
||||||
pub fn test2() {
|
pub fn test2(age: i64) {
|
||||||
use fce_sqlite_connector::Value;
|
use fce_sqlite_connector::Value;
|
||||||
|
|
||||||
let connection = fce_sqlite_connector::open(":memory:").unwrap();
|
let connection = fce_sqlite_connector::open(":memory:").unwrap();
|
||||||
@ -67,7 +67,7 @@ pub fn test2() {
|
|||||||
.unwrap()
|
.unwrap()
|
||||||
.cursor();
|
.cursor();
|
||||||
|
|
||||||
cursor.bind(&[Value::Integer(50)]).unwrap();
|
cursor.bind(&[Value::Integer(age)]).unwrap();
|
||||||
|
|
||||||
while let Some(row) = cursor.next().unwrap() {
|
while let Some(row) = cursor.next().unwrap() {
|
||||||
println!("name = {}", row[0].as_string().unwrap());
|
println!("name = {}", row[0].as_string().unwrap());
|
||||||
@ -77,7 +77,7 @@ pub fn test2() {
|
|||||||
|
|
||||||
#[fce]
|
#[fce]
|
||||||
pub fn test3() {
|
pub fn test3() {
|
||||||
let db_path = "/tmp/users.sqlite";
|
let db_path = "/var/folders/ww/v__xg0cj17x7h7sf3bgwpx8h0000gn/T/4589ab6f-5440-4933-ace5-a62714784142/tmp/users.sqlite";
|
||||||
let connection = fce_sqlite_connector::open(db_path).unwrap();
|
let connection = fce_sqlite_connector::open(db_path).unwrap();
|
||||||
|
|
||||||
let execute_result = connection.execute(
|
let execute_result = connection.execute(
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "fluence-app-service"
|
name = "fluence-app-service"
|
||||||
description = "Fluence Application Service"
|
description = "Fluence Application Service"
|
||||||
version = "0.1.11"
|
version = "0.1.12"
|
||||||
authors = ["Fluence Labs"]
|
authors = ["Fluence Labs"]
|
||||||
license = "Apache-2.0"
|
license = "Apache-2.0"
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
fluence-faas = { path = "../fluence-faas", version = "0.1.11" }
|
fluence-faas = { path = "../fluence-faas", version = "0.1.12" }
|
||||||
|
|
||||||
maplit = "1.0.2"
|
maplit = "1.0.2"
|
||||||
log = "0.4.8"
|
log = "0.4.8"
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "fluence-faas"
|
name = "fluence-faas"
|
||||||
description = "Fluence FaaS"
|
description = "Fluence FaaS"
|
||||||
version = "0.1.11"
|
version = "0.1.12"
|
||||||
authors = ["Fluence Labs"]
|
authors = ["Fluence Labs"]
|
||||||
license = "Apache-2.0"
|
license = "Apache-2.0"
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
fce = { path = "../engine", version = "0.1.10" }
|
fce = { path = "../engine", version = "0.1.11" }
|
||||||
fce-utils = { path = "../crates/utils", version = "0.1.0" }
|
fce-utils = { path = "../crates/utils", version = "0.1.0" }
|
||||||
fluence-sdk-main = "=0.2.8"
|
fluence-sdk-main = "=0.2.8"
|
||||||
|
|
||||||
@ -15,7 +15,7 @@ wasmer-runtime = { package = "wasmer-runtime-fl", version = "0.17.0" }
|
|||||||
# dynamicfunc-fat-closures allows using state inside DynamicFunc
|
# dynamicfunc-fat-closures allows using state inside DynamicFunc
|
||||||
wasmer-core = { package = "wasmer-runtime-core-fl", version = "0.17.0", features = ["dynamicfunc-fat-closures"] }
|
wasmer-core = { package = "wasmer-runtime-core-fl", version = "0.17.0", features = ["dynamicfunc-fat-closures"] }
|
||||||
wasmer-wasi = { package = "wasmer-wasi-fl", version = "0.17.0" }
|
wasmer-wasi = { package = "wasmer-wasi-fl", version = "0.17.0" }
|
||||||
wasmer-wit = { package = "wasmer-interface-types-fl", version = "=0.17.17" }
|
wasmer-wit = { package = "wasmer-interface-types-fl", version = "0.17.17" }
|
||||||
|
|
||||||
toml = "0.5.6"
|
toml = "0.5.6"
|
||||||
serde = { version = "1.0.111", features = ["derive"] }
|
serde = { version = "1.0.111", features = ["derive"] }
|
||||||
|
@ -36,7 +36,7 @@ pub struct FaaSInterface<'a> {
|
|||||||
|
|
||||||
impl<'a> fmt::Display for FaaSInterface<'a> {
|
impl<'a> fmt::Display for FaaSInterface<'a> {
|
||||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
let type_text_view = |arg_ty: &IType, record_types: &RecordTypes| {
|
fn type_text_view(arg_ty: &IType, record_types: &RecordTypes) -> String {
|
||||||
match arg_ty {
|
match arg_ty {
|
||||||
IType::Record(record_type_id) => {
|
IType::Record(record_type_id) => {
|
||||||
// unwrap is safe because FaaSInterface here is well-formed
|
// unwrap is safe because FaaSInterface here is well-formed
|
||||||
@ -44,7 +44,9 @@ impl<'a> fmt::Display for FaaSInterface<'a> {
|
|||||||
let record = record_types.get(record_type_id).unwrap();
|
let record = record_types.get(record_type_id).unwrap();
|
||||||
record.name.clone()
|
record.name.clone()
|
||||||
}
|
}
|
||||||
IType::Array(array_ty) => format!("Array<{:?}>", array_ty),
|
IType::Array(array_ty) => {
|
||||||
|
format!("Array<{}>", type_text_view(array_ty, record_types))
|
||||||
|
}
|
||||||
t => format!("{:?}", t),
|
t => format!("{:?}", t),
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "frepl"
|
name = "frepl"
|
||||||
description = "Fluence FCE REPL intended for testing purposes"
|
description = "Fluence FCE REPL intended for testing purposes"
|
||||||
version = "0.1.15"
|
version = "0.1.16"
|
||||||
authors = ["Fluence Labs"]
|
authors = ["Fluence Labs"]
|
||||||
repository = "https://github.com/fluencelabs/fce/tools/repl"
|
repository = "https://github.com/fluencelabs/fce/tools/repl"
|
||||||
license = "Apache-2.0"
|
license = "Apache-2.0"
|
||||||
@ -12,7 +12,7 @@ name = "fce-repl"
|
|||||||
path = "src/main.rs"
|
path = "src/main.rs"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
fluence-app-service = { path = "../../fluence-app-service", version = "0.1.10", features = ["raw-module-api"] }
|
fluence-app-service = { path = "../../fluence-app-service", version = "0.1.12", features = ["raw-module-api"] }
|
||||||
|
|
||||||
anyhow = "1.0.31"
|
anyhow = "1.0.31"
|
||||||
clap = "2.33.1"
|
clap = "2.33.1"
|
||||||
|
Reference in New Issue
Block a user