Merge pull request #18 from fluencelabs/mounted_binary_result

This commit is contained in:
vms 2021-02-24 11:44:41 +03:00 committed by GitHub
commit eb882bc2a9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 100 additions and 12 deletions

View File

@ -1,6 +1,6 @@
[package]
name = "fluence"
version = "0.2.18" # remember to update html_root_url
version = "0.3.0" # remember to update html_root_url
description = "Fluence backend SDK for developing backend applications for the Fluence network"
documentation = "https://docs.rs/fluence/"
repository = "https://github.com/fluencelabs/rust-sdk"
@ -18,8 +18,8 @@ all-features = true
path = "src/lib.rs"
[dependencies]
fluence-sdk-macro = { path = "crates/macro", version = "=0.2.18" }
fluence-sdk-main = { path = "crates/main", version = "=0.2.18" }
fluence-sdk-macro = { path = "crates/macro", version = "=0.3.0" }
fluence-sdk-main = { path = "crates/main", version = "=0.3.0" }
[features]
# Print some internal logs by log_utf8_string

View File

@ -1,6 +1,6 @@
[package]
name = "fluence-sdk-macro"
version = "0.2.18" # remember to update html_root_url
version = "0.3.0" # remember to update html_root_url
edition = "2018"
description = "Definition of `#[invoke_handler]` attribute"
documentation = "https://docs.rs/fluence/fluence-sdk-macro"
@ -17,4 +17,4 @@ all-features = true
proc-macro = true
[dependencies]
fluence-sdk-wit = { path = "../wit", version = "=0.2.18" }
fluence-sdk-wit = { path = "../wit", version = "=0.3.0" }

View File

@ -54,7 +54,7 @@
//!
//! ```
#![doc(html_root_url = "https://docs.rs/fluence-sdk-macro/0.2.18")]
#![doc(html_root_url = "https://docs.rs/fluence-sdk-macro/0.3.0")]
#![deny(
dead_code,
nonstandard_style,

View File

@ -1,6 +1,6 @@
[package]
name = "fluence-sdk-main"
version = "0.2.18" # remember to update html_root_url
version = "0.3.0" # remember to update html_root_url
edition = "2018"
description = "Rust SDK for applications for the Fluence network"
documentation = "https://docs.rs/fluence/fluence-sdk-macro"
@ -18,7 +18,7 @@ path = "src/lib.rs"
crate-type = ["rlib"]
[dependencies]
fluence-sdk-macro = { path = "../macro", version = "=0.2.18" }
fluence-sdk-macro = { path = "../macro", version = "=0.3.0" }
log = { version = "0.4.8", features = ["std"] }
serde = "=1.0.118"

View File

@ -19,7 +19,7 @@
#![allow(clippy::missing_safety_doc)]
#![allow(clippy::needless_doctest_main)]
#![doc(html_root_url = "https://docs.rs/fluence-sdk-main/0.2.18")]
#![doc(html_root_url = "https://docs.rs/fluence-sdk-main/0.3.0")]
#![deny(
dead_code,
nonstandard_style,
@ -35,6 +35,7 @@ mod call_parameters;
mod export_allocator;
#[cfg(any(feature = "debug", feature = "logger"))]
mod logger;
pub mod mounted_binary;
mod result;
pub use call_parameters::CallParameters;

View File

@ -0,0 +1,84 @@
/*
* 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.
*/
use fluence_sdk_macro::fce;
use serde::Serialize;
use serde::Deserialize;
pub const SUCCESS_CODE: i32 = 0;
/// Describes result of calling a CLI service.
#[fce]
#[derive(Clone, PartialEq, Default, Eq, Debug, Serialize, Deserialize)]
pub struct Result {
/// Return process exit code or host execution error code, where SUCCESS_CODE means success.
pub ret_code: i32,
/// Contains the string representation of an error, if ret_code != SUCCESS_CODE.
pub error: String,
/// The data that the process wrote to stdout.
pub stdout: Vec<u8>,
/// The data that the process wrote to stderr.
pub stderr: Vec<u8>,
}
impl Result {
/// Create a new failure MountedBinaryResult from the provided ret_code.
pub fn from_error(ret_code: i32, error: impl Into<String>) -> Self {
Self {
ret_code,
error: error.into(),
stdout: Vec::new(),
stderr: Vec::new(),
}
}
/// Return true, if this Result represents a success result, otherwise false.
pub fn is_success(&self) -> bool {
return self.ret_code == SUCCESS_CODE;
}
/// This function tries to transform a result to the string representation.
/// Internally, It checks ret_code and returns either Some(Ok(stdout)) if it was SUCCESS_CODE
/// or Some(Err(error)) otherwise. None is returned if stdout or stderr contains non valid
/// UTF8 string.
pub fn into_std(self) -> Option<std::result::Result<String, String>> {
if self.ret_code == SUCCESS_CODE {
let stdout = String::from_utf8(self.stdout).ok()?;
Some(Ok(stdout))
} else {
let stderr = std::str::from_utf8(&self.stdout).ok()?;
Some(Ok(format!("error: {}, stderr: {}", self.error, stderr)))
}
}
/// This function tries to represent a result to the string representation.
/// Internally, It checks ret_code and returns either Some(Ok(stdout)) if it was SUCCESS_CODE
/// or Some(Err(error)) otherwise. None is returned if stdout or stderr contains non valid
/// UTF8 string.
pub fn as_std(&self) -> Option<std::result::Result<String, String>> {
if self.ret_code == SUCCESS_CODE {
let stdout = String::from_utf8(self.stdout.clone()).ok()?;
Some(Ok(stdout))
} else {
let stderr = std::str::from_utf8(&self.stdout).ok()?;
Some(Ok(format!("error: {}, stderr: {}", self.error, stderr)))
}
}
}

View File

@ -1,6 +1,6 @@
[package]
name = "fluence-sdk-wit"
version = "0.2.18" # remember to update html_root_url
version = "0.3.0" # remember to update html_root_url
edition = "2018"
description = "Webassembly interface-types generator"
documentation = "https://docs.rs/fluence/fluence-sdk-macro"

View File

@ -14,7 +14,7 @@
* limitations under the License.
*/
#![doc(html_root_url = "https://docs.rs/wit-support/0.2.18")]
#![doc(html_root_url = "https://docs.rs/wit-support/0.3.0")]
#![deny(
dead_code,
nonstandard_style,

View File

@ -55,7 +55,7 @@
//! pub fn curl_get(url: String) -> String;
//! }
//! ```
#![doc(html_root_url = "https://docs.rs/fluence/0.2.18")]
#![doc(html_root_url = "https://docs.rs/fluence/0.3.0")]
#![deny(
dead_code,
nonstandard_style,
@ -79,6 +79,9 @@ pub use fluence_sdk_main::WasmLoggerBuilder;
#[cfg(feature = "logger")]
pub use fluence_sdk_main::TargetMap;
pub use fluence_sdk_main::mounted_binary::Result as MountedBinaryResult;
pub use fluence_sdk_main::mounted_binary::SUCCESS_CODE as BINARY_SUCCESS_CODE;
/// These API functions are intended for internal usage in generated code.
/// Normally, you shouldn't use them.
pub mod internal {