add docs for public crates

This commit is contained in:
vms 2020-07-08 12:38:56 +03:00
parent be0451accb
commit 5f26af7990
11 changed files with 69 additions and 62 deletions

View File

@ -22,11 +22,10 @@ fluence-sdk-main = { path = "crates/main", version = "=0.2.0" }
[features]
# Print some internal logs by log_utf8_string
print_logs = ["fluence-sdk-main/print_logs"]
debug = ["fluence-sdk-main/debug"]
[workspace]
members = [
"crates/greeting",
"crates/main",
"crates/macro",
"crates/wit-support",

View File

@ -1,8 +0,0 @@
[package]
name = "greeting"
version = "0.1.0"
authors = ["vms <michail.vms@gmail.com>"]
edition = "2018"
[dependencies]
fluence = { path = "../../", version = "=0.2.0" }

View File

@ -1,18 +0,0 @@
use fluence::fce;
fn main() {}
#[fce]
pub fn greeting(arg: String, arg2: String, arg3: i32) -> i64 {
let res = format!("Hi {} {}", arg, arg2);
ipfs(res, arg2);
ipfs1(arg);
arg3 as _
}
#[fce]
#[link(wasm_import_module = "ipfs_node.wasm")]
extern "C" {
pub fn ipfs(cmd: String, aa: String) -> String;
pub fn ipfs1(cmd: String) -> String;
}

View File

@ -14,6 +14,46 @@
* limitations under the License.
*/
//! Defines the #[fce] macro that should be used with all export functions, extern blocks.
//! At now, It supports the following types that could be used as parameters in export or foreign
//! functions: i8, i16, i32, i64, u8, u16, u32, u64, f32, f64, bool, String, Vec<u8>. Also struct
//! where all fields are public and have aforementioned types could be used as parameters. In this
//! case #[fce] should be also applied to this structs.
//!
//! # Examples
//!
//! This example shows how a function could be exported:
//! ```
//! #[fce]
//! pub fn greeting(name: String) -> String {
//! format!("Hi {}", name)
//! }
//! ```
//!
//! This more complex example shows how a function could be imported from another Wasm module
//! and how a struct could be passed:
//!
//! ```
//! #[fce]
//! struct HostReturnValue {
//! pub error_code: i32,
//! pub outcome: Vec<u8>
//! }
//!
//! #[fce]
//! pub fn read_ipfs_file(file_path: String) -> HostReturnValue {
//! let hash = calculate_hash(file_path);
//! ipfs(hash)
//! }
//!
//! #[fce]
//! #[link(wasm_import_module = "ipfs_node.wasm")]
//! extern "C" {
//! pub fn ipfs(file_hash: String) -> HostReturnValue;
//! }
//!
//! ```
#![doc(html_root_url = "https://docs.rs/fluence-sdk-macro/0.2.0")]
#![deny(
dead_code,

View File

@ -2,7 +2,7 @@
name = "fluence-sdk-main"
version = "0.2.0" # remember to update html_root_url
edition = "2018"
description = "Rust SDK for writing applications for Fluence"
description = "Rust SDK for applications for the Fluence network"
documentation = "https://docs.rs/fluence/fluence-sdk-macro"
repository = "https://github.com/fluencelabs/rust-sdk/crates/main"
authors = ["Fluence Labs"]
@ -26,4 +26,4 @@ lazy_static = "1.4.0" # used in doc test
[features]
# Print some internal logs by log_utf8_string
print_logs = []
debug = []

View File

@ -14,7 +14,7 @@
* limitations under the License.
*/
use crate::log_utf8_string;
use super::log;
use std::alloc::alloc as global_alloc;
use std::alloc::dealloc as global_dealloc;
@ -31,8 +31,7 @@ pub unsafe fn allocate(size: usize) -> usize {
Err(_) => return 0,
};
let msg = format!("sdk.allocate: {:?}\n", size);
log_utf8_string(msg.as_ptr() as _, msg.len() as _);
log(format!("sdk.allocate: {:?}\n", size));
global_alloc(layout) as _
}
@ -48,8 +47,7 @@ pub unsafe fn deallocate(ptr: *mut u8, size: usize) {
Err(_) => return,
};
let msg = format!("sdk.deallocate: {:?} {}\n", ptr, size);
log_utf8_string(msg.as_ptr() as _, msg.len() as _);
log(format!("sdk.deallocate: {:?} {}\n", ptr, size));
global_dealloc(ptr, layout);
}

View File

@ -35,8 +35,6 @@ mod export_allocator;
mod logger;
mod result;
pub(crate) use logger::log_utf8_string;
pub use export_allocator::allocate;
pub use export_allocator::deallocate;
pub use logger::WasmLogger;
@ -44,3 +42,13 @@ pub use result::get_result_ptr;
pub use result::get_result_size;
pub use result::set_result_ptr;
pub use result::set_result_size;
#[allow(unused_variables)]
pub(crate) fn log<S: AsRef<str>>(msg: S) {
// logs will be printed only if debug feature is enabled
#[cfg(debug)]
unsafe {
let msg = msg.as_ref();
logger::log_utf8_string(msg.as_ptr() as _, msg.len() as _);
}
}

View File

@ -14,17 +14,8 @@
* limitations under the License.
*/
//! This module enables log messages from the Wasm side. It is implemented as a logging facade for
//! crate [`log`]. To enable this module in your project please specify `wasm_logger` feature of
//! `fluence_sdk`.
//!
//! Note that this module works only for the Wasm environments and Fluence `WasmVm` - with this
//! feature set it is possible to compile applications only for Wasm targets such as
//! `wasm32-unknown-unknown`, `wasm32-wasi`. (please refer to the first example to find out a way
//! to avoid it).
//!
//! This feature should be used only for debugging purposes, you can find more info in the
//! [`backend app debugging`] section of the Fluence guide.
//! This module allows log messages from the Wasm side. It is implemented as a logging facade for
//! crate [`log`].
//!
//! # Examples
//!

View File

@ -14,7 +14,11 @@
* limitations under the License.
*/
use crate::log_utf8_string;
//! Contains ad-hoc implementations of returning complex data types from function calls
//! by two global variables that contain pointer and size. Will be refactored after multi-value
//! support in Wasmer.
use super::log;
use std::sync::atomic::AtomicUsize;
@ -23,32 +27,28 @@ static mut RESULT_SIZE: AtomicUsize = AtomicUsize::new(0);
#[no_mangle]
pub unsafe fn get_result_ptr() -> usize {
let msg = "sdk.get_result_ptr\n";
log_utf8_string(msg.as_ptr() as _, msg.len() as _);
log("sdk.get_result_ptr\n");
*RESULT_PTR.get_mut()
}
#[no_mangle]
pub unsafe fn get_result_size() -> usize {
let msg = "sdk.get_result_size\n";
log_utf8_string(msg.as_ptr() as _, msg.len() as _);
log("sdk.get_result_size\n");
*RESULT_SIZE.get_mut()
}
#[no_mangle]
pub unsafe fn set_result_ptr(ptr: usize) {
let msg = format!("sdk.set_result_ptr: {}\n", ptr);
log_utf8_string(msg.as_ptr() as _, msg.len() as _);
log(format!("sdk.set_result_ptr: {}\n", ptr));
*RESULT_PTR.get_mut() = ptr;
}
#[no_mangle]
pub unsafe fn set_result_size(size: usize) {
let msg = format!("sdk.set_result_size: {}\n", size);
log_utf8_string(msg.as_ptr() as _, msg.len() as _);
log(format!("sdk.set_result_size: {}\n", size));
*RESULT_SIZE.get_mut() = size;
}

View File

@ -1,5 +1,5 @@
[package]
name = "wit"
name = "fluence-wit"
version = "0.1.0"
authors = ["Fluence Labs"]
edition = "2018"

View File

@ -14,14 +14,11 @@
* limitations under the License.
*/
//! Rust backend SDK for writing applications for Fluence. This crate is just a wrapper for two
//! Rust backend SDK for applications on the Fluence network. This crate is just a wrapper for two
//! other crates: `main` and `macro`. The `main` crate is used for all memory relative operations
//! and logging, while the `macro` crate contains the invocation macro to simplify entry point
//! functions.
//!
//! By default this crate turns on export-allocator feature of the `main` crate, to disable it
//! please import this crate with `default-features = false`.
//!
#![doc(html_root_url = "https://docs.rs/fluence/0.2.0")]
#![deny(
dead_code,