mirror of
https://github.com/fluencelabs/marine-rs-sdk-test
synced 2024-12-04 23:30:18 +00:00
Generate structs in a separate mod (#36)
This commit is contained in:
parent
3de1d949e4
commit
2ac0699905
100
Cargo.lock
generated
100
Cargo.lock
generated
@ -382,18 +382,6 @@ dependencies = [
|
|||||||
"libc",
|
"libc",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "fluence"
|
|
||||||
version = "0.6.6"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "f91d764c08b24ba9b4e849151c0adef603759d6e1bba445c8efccebf1bafd83a"
|
|
||||||
dependencies = [
|
|
||||||
"fluence-sdk-main 0.6.6",
|
|
||||||
"marine-macro 0.6.6",
|
|
||||||
"marine-timestamp-macro 0.6.6",
|
|
||||||
"serde",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "fluence"
|
name = "fluence"
|
||||||
version = "0.6.8"
|
version = "0.6.8"
|
||||||
@ -405,6 +393,18 @@ dependencies = [
|
|||||||
"trybuild",
|
"trybuild",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "fluence"
|
||||||
|
version = "0.6.8"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a92116bbed3be3afee952d62d6009f1a365bde985a1cf59fb933144308660743"
|
||||||
|
dependencies = [
|
||||||
|
"fluence-sdk-main 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"marine-macro 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"marine-timestamp-macro 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"serde",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "fluence-app-service"
|
name = "fluence-app-service"
|
||||||
version = "0.7.2"
|
version = "0.7.2"
|
||||||
@ -428,8 +428,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "9421599c5540e50f3854a0a48702c31408ac1cfb06314fe391792daa3a9d800b"
|
checksum = "9421599c5540e50f3854a0a48702c31408ac1cfb06314fe391792daa3a9d800b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cmd_lib",
|
"cmd_lib",
|
||||||
"fluence 0.6.6",
|
"fluence 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"fluence-sdk-main 0.6.6",
|
"fluence-sdk-main 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"itertools 0.9.0",
|
"itertools 0.9.0",
|
||||||
"log",
|
"log",
|
||||||
"marine-runtime",
|
"marine-runtime",
|
||||||
@ -458,17 +458,6 @@ dependencies = [
|
|||||||
"wast",
|
"wast",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "fluence-sdk-main"
|
|
||||||
version = "0.6.6"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "887afdd8429bfc0f5d27258ddf95e3140c404932b8ace09b28468638320f6bf3"
|
|
||||||
dependencies = [
|
|
||||||
"log",
|
|
||||||
"marine-macro 0.6.6",
|
|
||||||
"serde",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "fluence-sdk-main"
|
name = "fluence-sdk-main"
|
||||||
version = "0.6.8"
|
version = "0.6.8"
|
||||||
@ -480,6 +469,17 @@ dependencies = [
|
|||||||
"simple_logger",
|
"simple_logger",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "fluence-sdk-main"
|
||||||
|
version = "0.6.8"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "fcbf30472768d331ea6a6853bdf1fc6166ba697d46a9ce74c3ccf5764a58414a"
|
||||||
|
dependencies = [
|
||||||
|
"log",
|
||||||
|
"marine-macro 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"serde",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "fluence-sdk-wit"
|
name = "fluence-sdk-wit"
|
||||||
version = "0.6.1"
|
version = "0.6.1"
|
||||||
@ -496,7 +496,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "fluence-test"
|
name = "fluence-test"
|
||||||
version = "0.1.8"
|
version = "0.1.9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"fluence-app-service",
|
"fluence-app-service",
|
||||||
"marine-test-macro",
|
"marine-test-macro",
|
||||||
@ -812,15 +812,6 @@ dependencies = [
|
|||||||
"wasmer-runtime-core-fl",
|
"wasmer-runtime-core-fl",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "marine-macro"
|
|
||||||
version = "0.6.6"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "67b8d5e91818871ad7d2464a32f5a158f85b6cc5eda289d97478badadb73e141"
|
|
||||||
dependencies = [
|
|
||||||
"marine-macro-impl 0.6.6",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "marine-macro"
|
name = "marine-macro"
|
||||||
version = "0.6.8"
|
version = "0.6.8"
|
||||||
@ -829,17 +820,12 @@ dependencies = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "marine-macro-impl"
|
name = "marine-macro"
|
||||||
version = "0.6.6"
|
version = "0.6.8"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2e216a77d77323575dd491cd5e531205e2ed8e47c65dd4ff69fb3804045b45cc"
|
checksum = "b9107f5956f578d4815a17c963836cffadf481801ae453e0247693e87f1de734"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"marine-macro-impl 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"quote",
|
|
||||||
"serde",
|
|
||||||
"serde_json",
|
|
||||||
"syn",
|
|
||||||
"uuid",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -855,6 +841,20 @@ dependencies = [
|
|||||||
"uuid",
|
"uuid",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "marine-macro-impl"
|
||||||
|
version = "0.6.8"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7244dd6e5d624bb9d1e63777c3bbc3a8c857973d2b7633aa8d0b612d7770a55d"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"serde",
|
||||||
|
"serde_json",
|
||||||
|
"syn",
|
||||||
|
"uuid",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "marine-module-info-parser"
|
name = "marine-module-info-parser"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
@ -863,7 +863,7 @@ checksum = "003017e314cebb5c774569a4257f5eca82106cff170b124c6712f2fcd3ceefef"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"chrono",
|
"chrono",
|
||||||
"fluence-sdk-main 0.6.6",
|
"fluence-sdk-main 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"semver 0.11.0",
|
"semver 0.11.0",
|
||||||
"serde",
|
"serde",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
@ -902,7 +902,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "marine-test-macro"
|
name = "marine-test-macro"
|
||||||
version = "0.1.8"
|
version = "0.1.9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"marine-test-macro-impl",
|
"marine-test-macro-impl",
|
||||||
"proc-macro-error",
|
"proc-macro-error",
|
||||||
@ -913,7 +913,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "marine-test-macro-impl"
|
name = "marine-test-macro-impl"
|
||||||
version = "0.1.8"
|
version = "0.1.9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"darling",
|
"darling",
|
||||||
"fluence-app-service",
|
"fluence-app-service",
|
||||||
@ -927,9 +927,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "marine-timestamp-macro"
|
name = "marine-timestamp-macro"
|
||||||
version = "0.6.6"
|
version = "0.6.8"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "54d65dd757302f2a19d2ea8d231627ca3246a58ac677d22f40bb61ba649d97a0"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"chrono",
|
"chrono",
|
||||||
"quote",
|
"quote",
|
||||||
@ -938,6 +936,8 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "marine-timestamp-macro"
|
name = "marine-timestamp-macro"
|
||||||
version = "0.6.8"
|
version = "0.6.8"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ecb3037577a262360b7e2f0fb5470b7ad0aabcefcb8d2421a4871a854d0a37b2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"chrono",
|
"chrono",
|
||||||
"quote",
|
"quote",
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "marine-test-macro-impl"
|
name = "marine-test-macro-impl"
|
||||||
version = "0.1.8" # remember to update html_root_url
|
version = "0.1.9" # remember to update html_root_url
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
description = "Implementation of the `#[marine_test]` macro"
|
description = "Implementation of the `#[marine_test]` macro"
|
||||||
documentation = "https://docs.rs/fluence/marine-test-macro-impl"
|
documentation = "https://docs.rs/fluence/marine-test-macro-impl"
|
||||||
|
@ -225,7 +225,7 @@ fn generate_module_ctors<'n>(
|
|||||||
.map(|name| -> TResult<_> {
|
.map(|name| -> TResult<_> {
|
||||||
// TODO: optimize these two call because they are called twice for each module name
|
// TODO: optimize these two call because they are called twice for each module name
|
||||||
// and internally allocate memory in format call.
|
// and internally allocate memory in format call.
|
||||||
let module_name = marine_test::utils::generate_module_name(&name)?;
|
let module_name = marine_test::utils::generate_structs_module_ident(&name)?;
|
||||||
let struct_name = marine_test::utils::generate_struct_name(&name)?;
|
let struct_name = marine_test::utils::generate_struct_name(&name)?;
|
||||||
let name_for_user = marine_test::utils::new_ident(&name)?;
|
let name_for_user = marine_test::utils::new_ident(&name)?;
|
||||||
|
|
||||||
|
@ -65,8 +65,9 @@ pub(super) fn generate_module_definitions<'i>(
|
|||||||
|
|
||||||
fn generate_module_definition(module: &Module<'_>) -> TResult<TokenStream> {
|
fn generate_module_definition(module: &Module<'_>) -> TResult<TokenStream> {
|
||||||
let module_name = module.name;
|
let module_name = module.name;
|
||||||
let module_name_ident = utils::generate_module_name(module_name)?;
|
let module_ident = utils::generate_module_ident(module_name)?;
|
||||||
let struct_name_ident = utils::generate_struct_name(module_name)?;
|
let structs_module_ident = utils::generate_structs_module_ident(module_name)?;
|
||||||
|
let struct_ident = utils::generate_struct_name(module_name)?;
|
||||||
|
|
||||||
let module_interface = &module.interface;
|
let module_interface = &module.interface;
|
||||||
let module_records = record_type_generator::generate_records(&module_interface.record_types)?;
|
let module_records = record_type_generator::generate_records(&module_interface.record_types)?;
|
||||||
@ -77,21 +78,27 @@ fn generate_module_definition(module: &Module<'_>) -> TResult<TokenStream> {
|
|||||||
)?;
|
)?;
|
||||||
|
|
||||||
let module_definition = quote! {
|
let module_definition = quote! {
|
||||||
pub mod #module_name_ident {
|
// it's a sort of hack: this module structure allows user to import structs by
|
||||||
#(#module_records)*
|
// use module_name_structs::StructName;
|
||||||
|
pub mod #structs_module_ident {
|
||||||
|
pub use #module_ident::*;
|
||||||
|
|
||||||
pub struct #struct_name_ident {
|
pub mod #module_ident {
|
||||||
marine: std::rc::Rc<std::cell::RefCell<fluence_test::internal::AppService>>,
|
#(#module_records)*
|
||||||
}
|
|
||||||
|
|
||||||
impl #struct_name_ident {
|
pub struct #struct_ident {
|
||||||
pub fn new(marine: std::rc::Rc<std::cell::RefCell<fluence_test::internal::AppService>>) -> Self {
|
marine: std::rc::Rc<std::cell::RefCell<fluence_test::internal::AppService>>,
|
||||||
Self { marine }
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
impl #struct_name_ident {
|
impl #struct_ident {
|
||||||
#(#module_functions)*
|
pub fn new(marine: std::rc::Rc<std::cell::RefCell<fluence_test::internal::AppService>>) -> Self {
|
||||||
|
Self { marine }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl #struct_ident {
|
||||||
|
#(#module_functions)*
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -31,7 +31,7 @@ pub(super) fn generate_records(records: &MRecordTypes) -> TResult<Vec<TokenStrea
|
|||||||
let fields = prepare_field(record.fields.deref().iter(), records)?;
|
let fields = prepare_field(record.fields.deref().iter(), records)?;
|
||||||
|
|
||||||
let generated_record = quote! {
|
let generated_record = quote! {
|
||||||
#[derive(Clone, fluence_test::internal::serde::Serialize, fluence_test::internal::serde::Deserialize)]
|
#[derive(Clone, Debug, fluence_test::internal::serde::Serialize, fluence_test::internal::serde::Deserialize)]
|
||||||
#[serde(crate = "fluence_test::internal::serde")]
|
#[serde(crate = "fluence_test::internal::serde")]
|
||||||
pub struct #record_name_ident {
|
pub struct #record_name_ident {
|
||||||
#(pub #fields),*
|
#(pub #fields),*
|
||||||
|
@ -21,9 +21,14 @@ use marine_it_parser::interface::it::IType;
|
|||||||
use proc_macro2::TokenStream;
|
use proc_macro2::TokenStream;
|
||||||
use quote::quote;
|
use quote::quote;
|
||||||
|
|
||||||
pub(super) fn generate_module_name(module_name: &str) -> TResult<syn::Ident> {
|
pub(super) fn generate_module_ident(module_name: &str) -> TResult<syn::Ident> {
|
||||||
let extended_module_name = format!("__m_generated_{}", module_name);
|
let generated_module_name = format!("__m_generated_{}", module_name);
|
||||||
new_ident(&extended_module_name)
|
new_ident(&generated_module_name)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(super) fn generate_structs_module_ident(module_name: &str) -> TResult<syn::Ident> {
|
||||||
|
let generated_module_name = format!("{}_structs", module_name);
|
||||||
|
new_ident(&generated_module_name)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(super) fn generate_record_name(record_name: &str) -> TResult<syn::Ident> {
|
pub(super) fn generate_record_name(record_name: &str) -> TResult<syn::Ident> {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "marine-test-macro"
|
name = "marine-test-macro"
|
||||||
version = "0.1.8" # remember to update html_root_url
|
version = "0.1.9" # remember to update html_root_url
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
description = "Definition of the `#[marine_test]` macro"
|
description = "Definition of the `#[marine_test]` macro"
|
||||||
documentation = "https://docs.rs/fluence/marine-test-macro"
|
documentation = "https://docs.rs/fluence/marine-test-macro"
|
||||||
@ -18,7 +18,7 @@ proc-macro = true
|
|||||||
doctest = false
|
doctest = false
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
marine-test-macro-impl = { path = "../marine-test-macro-impl", version = "0.1.8" }
|
marine-test-macro-impl = { path = "../marine-test-macro-impl", version = "=0.1.9" }
|
||||||
|
|
||||||
quote = "1.0.9"
|
quote = "1.0.9"
|
||||||
proc-macro2 = "1.0.24"
|
proc-macro2 = "1.0.24"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "fluence-test"
|
name = "fluence-test"
|
||||||
version = "0.1.8" # remember to update html_root_url
|
version = "0.1.9" # remember to update html_root_url
|
||||||
description = "Fluence backend SDK for testing"
|
description = "Fluence backend SDK for testing"
|
||||||
documentation = "https://docs.rs/fluence-test"
|
documentation = "https://docs.rs/fluence-test"
|
||||||
repository = "https://github.com/fluencelabs/rust-sdk/tree/master/fluence-test"
|
repository = "https://github.com/fluencelabs/rust-sdk/tree/master/fluence-test"
|
||||||
@ -18,7 +18,7 @@ path = "src/lib.rs"
|
|||||||
doctest = false
|
doctest = false
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
marine-test-macro = { path = "../crates/marine-test-macro", version = "0.1.8" }
|
marine-test-macro = { path = "../crates/marine-test-macro", version = "=0.1.9" }
|
||||||
fluence-app-service = { version = "0.7.0", features = ["raw-module-api"] }
|
fluence-app-service = { version = "0.7.0", features = ["raw-module-api"] }
|
||||||
|
|
||||||
serde = { version = "1.0.118", features = ["derive"] }
|
serde = { version = "1.0.118", features = ["derive"] }
|
||||||
|
Loading…
Reference in New Issue
Block a user