use std::io::{Error, ErrorKind};
use crate::json::JsonValue;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum RequestBody {
Binary(Vec<u8>),
Text(String),
Json(JsonValue),
None,
}
impl RequestBody {
pub(crate) fn parse(body: &[u8], content_type: &str) -> Result<RequestBody, Error> {
if body.is_empty() {
return Ok(RequestBody::None);
}
match content_type {
"application/json" => match serde_json::from_slice(&body[..]) {
Ok(json) => Ok(RequestBody::Json(json)),
Err(_) => Err(Error::new(
ErrorKind::InvalidData,
"Error while parsing json body",
)),
},
"plain/text" => Ok(RequestBody::Text(body.iter().map(|&c| c as char).collect())),
_ => Ok(RequestBody::Binary(body.to_vec())),
}
}
}