wasmesh 0.1.0

wasmesh(WebAssembly Service Mesh) SDK
Documentation
use std::convert::{TryFrom, TryInto};
use std::fmt::{Display, Formatter};

pub use anyhow;
pub use bytes::{self, Bytes};
pub use guest::do_request;
pub use http::{uri, uri::Uri};
pub use message::{Method, Request, Response, Scheme};
pub use protobuf::{self, CodedOutputStream, Message, ProtobufEnum};
pub use wasmesh_macros::handler;

pub mod errors;
pub mod guest;
mod message;

impl Display for Scheme {
    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
        f.write_str(self.descriptor().name().to_lowercase().as_str())
    }
}

impl From<&uri::Scheme> for Scheme {
    fn from(scheme: &uri::Scheme) -> Self {
        scheme.as_str().try_into().unwrap()
    }
}

impl TryFrom<&str> for Scheme {
    type Error = anyhow::Error;

    fn try_from(value: &str) -> Result<Self, Self::Error> {
        match value.to_uppercase().as_str() {
            "HTTP" | "/" => Ok(Scheme::HTTP),
            "HTTPS" => Ok(Scheme::HTTPS),
            "RPC" => Ok(Scheme::RPC),
            "Scheme::WNS" => Ok(Scheme::WNS),
            _ => Err(anyhow::Error::msg(format!("unknown scheme: {}", value))),
        }
    }
}

impl Request {
    pub fn get_scheme(&self) -> anyhow::Result<Scheme> {
        let s = self.uri.splitn(2, "://").next().unwrap();
        s.try_into()
    }
    pub fn parse_uri(&self) -> anyhow::Result<Uri> {
        self.uri.as_str().parse::<Uri>().map_err(|e| anyhow::Error::new(e))
    }
}