connectrpc 0.1.0

Connect RPC implementation for Rust.
Documentation
use crate::header::HeaderMap;

#[derive(Debug)]
pub struct Parts<T>
where
    T: Send + Sync,
{
    pub status: http::StatusCode,
    pub metadata: HeaderMap,
    pub message: T,
}

#[derive(Debug, Clone)]
pub struct UnaryResponse<T>
where
    T: Send + Sync,
{
    status: http::StatusCode,
    metadata: HeaderMap,
    message: T,
}

impl<T> From<http::Response<T>> for UnaryResponse<T>
where
    T: Send + Sync,
{
    fn from(resp: http::Response<T>) -> Self {
        let (parts, body) = resp.into_parts();
        Self {
            status: parts.status,
            metadata: parts.headers,
            message: body,
        }
    }
}

impl<T> UnaryResponse<T>
where
    T: Send + Sync,
{
    pub fn new(body: T) -> Self {
        Self {
            status: http::StatusCode::OK,
            metadata: HeaderMap::new(),
            message: body,
        }
    }

    pub fn status(&self) -> http::StatusCode {
        self.status
    }

    pub fn metadata(&self) -> &HeaderMap {
        &self.metadata
    }

    pub fn message(&self) -> &T {
        &self.message
    }

    pub fn into_message(self) -> T {
        self.message
    }

    pub fn from_parts(parts: Parts<T>) -> Self {
        Self {
            status: parts.status,
            metadata: parts.metadata,
            message: parts.message,
        }
    }

    pub fn into_parts(self) -> Parts<T> {
        Parts {
            status: self.status,
            metadata: self.metadata,
            message: self.message,
        }
    }
}