stepflow-wasm 0.0.7

WASM build for StepFlow
Documentation
use std::ffi::CString;
use std::collections::HashMap;
use std::convert::TryFrom;
use tinyjson::{JsonValue, JsonGenerateError};

#[derive(Debug)]
pub enum StepFlowResult {
    Err(Box<dyn std::error::Error>),
    Ok(JsonValue),
}

impl From<Result<JsonValue, Box<dyn std::error::Error>>> for StepFlowResult {
    fn from(result: Result<JsonValue, Box<dyn std::error::Error>>) -> Self {
        match result {
            Ok(val) => StepFlowResult::Ok(val),
            Err(e) => StepFlowResult::Err(e),
        }
    }
}

impl From<Result<HashMap<String, JsonValue>, Box<dyn std::error::Error>>> for StepFlowResult {
    fn from(result: Result<HashMap<String, JsonValue>, Box<dyn std::error::Error>>) -> Self {
        match result {
            Ok(val) => StepFlowResult::Ok(JsonValue::Object(val)),
            Err(e) => StepFlowResult::Err(e),
        }
    }
}

impl TryFrom<StepFlowResult> for CString {
    type Error = JsonGenerateError;

    fn try_from(result: StepFlowResult) -> Result<Self, Self::Error> {
        let mut output: HashMap<String, JsonValue> = HashMap::new();
        match result {
            StepFlowResult::Err(e) => {
                output.insert("err".to_owned(), JsonValue::String(e.to_string()));
            }
            StepFlowResult::Ok(json_value) => {
                output.insert("ok".to_owned(), json_value);
            }
        };
        let json_string = JsonValue::Object(output).stringify()?;
        Ok(CString::new(json_string).unwrap())
    }
}