mirror of
https://github.com/fluencelabs/marine.git
synced 2025-06-22 11:11: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]]
|
||||
name = "fce"
|
||||
version = "0.1.10"
|
||||
version = "0.1.11"
|
||||
dependencies = [
|
||||
"boolinator",
|
||||
"bytes",
|
||||
@ -750,7 +750,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "fluence-app-service"
|
||||
version = "0.1.11"
|
||||
version = "0.1.12"
|
||||
dependencies = [
|
||||
"fluence-faas",
|
||||
"log",
|
||||
@ -764,7 +764,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "fluence-faas"
|
||||
version = "0.1.11"
|
||||
version = "0.1.12"
|
||||
dependencies = [
|
||||
"cmd_lib",
|
||||
"env_logger 0.7.1",
|
||||
@ -884,7 +884,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "frepl"
|
||||
version = "0.1.15"
|
||||
version = "0.1.16"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"clap",
|
||||
|
@ -15,7 +15,7 @@ fce-wit-parser = { path = "../wit-parser", version = "0.1.10"}
|
||||
fluence-sdk-wit = "0.2.8"
|
||||
|
||||
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"
|
||||
serde = { version = "1.0.110", features = ["derive"] }
|
||||
serde_json = "1.0.56"
|
||||
|
@ -11,5 +11,5 @@ name = "fce_wit_interfaces"
|
||||
path = "src/lib.rs"
|
||||
|
||||
[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"
|
||||
|
@ -16,4 +16,4 @@ fce-wit-interfaces = { path = "../wit-interfaces", version = "0.1.8" }
|
||||
anyhow = "1.0.31"
|
||||
walrus = "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]
|
||||
name = "fce"
|
||||
description = "Fluence Compute Engine"
|
||||
version = "0.1.10"
|
||||
version = "0.1.11"
|
||||
authors = ["Fluence Labs"]
|
||||
license = "Apache-2.0"
|
||||
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" }
|
||||
# dynamicfunc-fat-closures allows using state inside DynamicFunc
|
||||
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" }
|
||||
|
||||
multimap = "0.8.1"
|
||||
|
@ -439,55 +439,62 @@ impl FCEModule {
|
||||
export_funcs: &ExportFunctions,
|
||||
wit_instance: &Arc<WITInstance>,
|
||||
) -> Result<RecordTypes> {
|
||||
fn handle_record_type(
|
||||
record_type_id: u64,
|
||||
fn handle_itype(
|
||||
itype: &IType,
|
||||
wit_instance: &Arc<WITInstance>,
|
||||
export_record_types: &mut RecordTypes,
|
||||
) -> Result<()> {
|
||||
use wasmer_wit::interpreter::wasm::structures::Instance;
|
||||
|
||||
let record_type = wit_instance
|
||||
.wit_record_by_id(record_type_id)
|
||||
.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());
|
||||
fn handle_record_type(
|
||||
record_type_id: u64,
|
||||
wit_instance: &Arc<WITInstance>,
|
||||
export_record_types: &mut RecordTypes,
|
||||
) -> Result<()> {
|
||||
let record_type =
|
||||
wit_instance
|
||||
.wit_record_by_id(record_type_id)
|
||||
.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() {
|
||||
if let IType::Record(record_type_id) = &field.ty {
|
||||
handle_record_type(*record_type_id, wit_instance, export_record_types)?;
|
||||
for field in record_type.fields.iter() {
|
||||
handle_itype(&field.ty, 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(())
|
||||
}
|
||||
|
||||
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();
|
||||
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)
|
||||
|
Binary file not shown.
@ -6,5 +6,5 @@ fce build --release
|
||||
|
||||
rm 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/
|
||||
|
@ -21,7 +21,7 @@ use fce_sqlite_connector::State;
|
||||
pub fn main() {}
|
||||
|
||||
#[fce]
|
||||
pub fn test1() {
|
||||
pub fn test1(age: i64) {
|
||||
let connection = fce_sqlite_connector::open(":memory:").unwrap();
|
||||
|
||||
connection
|
||||
@ -38,7 +38,7 @@ pub fn test1() {
|
||||
.prepare("SELECT * FROM users WHERE age > ?")
|
||||
.unwrap();
|
||||
|
||||
statement.bind(1, 50).unwrap();
|
||||
statement.bind(1, age).unwrap();
|
||||
|
||||
while let State::Row = statement.next().unwrap() {
|
||||
println!("name = {}", statement.read::<String>(0).unwrap());
|
||||
@ -47,7 +47,7 @@ pub fn test1() {
|
||||
}
|
||||
|
||||
#[fce]
|
||||
pub fn test2() {
|
||||
pub fn test2(age: i64) {
|
||||
use fce_sqlite_connector::Value;
|
||||
|
||||
let connection = fce_sqlite_connector::open(":memory:").unwrap();
|
||||
@ -67,7 +67,7 @@ pub fn test2() {
|
||||
.unwrap()
|
||||
.cursor();
|
||||
|
||||
cursor.bind(&[Value::Integer(50)]).unwrap();
|
||||
cursor.bind(&[Value::Integer(age)]).unwrap();
|
||||
|
||||
while let Some(row) = cursor.next().unwrap() {
|
||||
println!("name = {}", row[0].as_string().unwrap());
|
||||
@ -77,7 +77,7 @@ pub fn test2() {
|
||||
|
||||
#[fce]
|
||||
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 execute_result = connection.execute(
|
||||
|
@ -1,13 +1,13 @@
|
||||
[package]
|
||||
name = "fluence-app-service"
|
||||
description = "Fluence Application Service"
|
||||
version = "0.1.11"
|
||||
version = "0.1.12"
|
||||
authors = ["Fluence Labs"]
|
||||
license = "Apache-2.0"
|
||||
edition = "2018"
|
||||
|
||||
[dependencies]
|
||||
fluence-faas = { path = "../fluence-faas", version = "0.1.11" }
|
||||
fluence-faas = { path = "../fluence-faas", version = "0.1.12" }
|
||||
|
||||
maplit = "1.0.2"
|
||||
log = "0.4.8"
|
||||
|
@ -1,13 +1,13 @@
|
||||
[package]
|
||||
name = "fluence-faas"
|
||||
description = "Fluence FaaS"
|
||||
version = "0.1.11"
|
||||
version = "0.1.12"
|
||||
authors = ["Fluence Labs"]
|
||||
license = "Apache-2.0"
|
||||
edition = "2018"
|
||||
|
||||
[dependencies]
|
||||
fce = { path = "../engine", version = "0.1.10" }
|
||||
fce = { path = "../engine", version = "0.1.11" }
|
||||
fce-utils = { path = "../crates/utils", version = "0.1.0" }
|
||||
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
|
||||
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-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"
|
||||
serde = { version = "1.0.111", features = ["derive"] }
|
||||
|
@ -36,7 +36,7 @@ pub struct FaaSInterface<'a> {
|
||||
|
||||
impl<'a> fmt::Display for FaaSInterface<'a> {
|
||||
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 {
|
||||
IType::Record(record_type_id) => {
|
||||
// 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();
|
||||
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),
|
||||
}
|
||||
};
|
||||
|
@ -1,7 +1,7 @@
|
||||
[package]
|
||||
name = "frepl"
|
||||
description = "Fluence FCE REPL intended for testing purposes"
|
||||
version = "0.1.15"
|
||||
version = "0.1.16"
|
||||
authors = ["Fluence Labs"]
|
||||
repository = "https://github.com/fluencelabs/fce/tools/repl"
|
||||
license = "Apache-2.0"
|
||||
@ -12,7 +12,7 @@ name = "fce-repl"
|
||||
path = "src/main.rs"
|
||||
|
||||
[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"
|
||||
clap = "2.33.1"
|
||||
|
Reference in New Issue
Block a user