use crate::mailbox::mailbox::WriteMailRequest;
use crate::util;
use http_body_util::BodyExt;
use http_pool::body::VariantBody;
use http_pool::http1;
use http_pool::net_pool::Pools;
use hyper::body::{Bytes, Incoming};
use hyper::{Request, Response, StatusCode};
pub async fn write_to_mailbox(
builder: &kmailbox::Builder,
namespace: Option<&String>,
pools: Pools<http1::Pool>,
request: Request<Incoming>,
) -> Result<(Response<VariantBody>, Option<anyhow::Error>), anyhow::Error> {
let body = request.collect().await.map_err(|e| anyhow::Error::new(e))?;
let req = WriteMailRequest::from_json(body.to_bytes().as_ref())
.map_err(|e| anyhow::Error::new(e).context("parse mailbox request error"))?;
let (rsp, err) = super::write_mail::write_to_mailbox(builder, namespace, pools, req).await;
Ok((
util::json_response(StatusCode::OK, Some(Bytes::from(rsp.to_json()?))),
err,
))
}