use bytes::Bytes;
use serde::Serialize;
use serde::de::DeserializeOwned;
use serde_json::Value;
use crate::error::LspError;
pub(crate) fn decode_params<P: DeserializeOwned>(params: &Bytes) -> Result<P, LspError> {
let bytes: &[u8] = if params.is_empty() { b"{}" } else { params };
serde_json::from_slice(bytes).map_err(LspError::invalid_params)
}
pub(crate) fn decode_value(params: &Bytes) -> Result<Value, LspError> {
decode_params(params)
}
pub(crate) fn erase_value<R: Serialize>(value: R) -> Result<Value, LspError> {
serde_json::to_value(value)
.map_err(|error| LspError::internal(format!("serialization failed: {error}")))
}
pub(crate) fn encode_body<R: Serialize>(value: &R) -> Result<Bytes, LspError> {
serde_json::to_vec(value)
.map(Bytes::from)
.map_err(|e| LspError::internal(format!("serialization failed: {e}")))
}