Make codec shape authority compile-time and fixed

This commit is contained in:
ms2k 2026-07-19 04:33:43 +09:00
commit 54cc167f81

View file

@ -38,7 +38,10 @@ pub fn private_stream_pair() -> std::io::Result<(OwnedFd, OwnedFd)> {
/// # Errors
/// Returns an error when a typed private packet is oversized or cannot be sent atomically.
pub fn send_packet<T: serde::Serialize>(descriptor: impl AsFd, message: &T) -> io::Result<()> {
pub fn send_packet<T: lazaret_core::records::SchemaType + serde::Serialize>(
descriptor: impl AsFd,
message: &T,
) -> io::Result<()> {
let encoded = encode(message).map_err(|error| io::Error::other(error.to_string()))?;
if encoded.is_empty() || encoded.len() > MAX_PRIVATE_PACKET {
return Err(io::Error::other("private packet has invalid size"));
@ -55,7 +58,7 @@ pub fn send_packet<T: serde::Serialize>(descriptor: impl AsFd, message: &T) -> i
/// Returns an error when a private packet is empty, oversized, malformed, or unknown-version.
pub fn receive_packet<T>(descriptor: impl AsFd) -> io::Result<T>
where
T: serde::de::DeserializeOwned + serde::Serialize,
T: lazaret_core::records::SchemaType + serde::de::DeserializeOwned + serde::Serialize,
{
let mut encoded = vec![0_u8; MAX_PRIVATE_PACKET + 1];
let (_, received) = recv(descriptor.as_fd(), &mut encoded, RecvFlags::empty())?;