diff options
Diffstat (limited to 'msg_socket2/src/ser.rs')
-rw-r--r-- | msg_socket2/src/ser.rs | 34 |
1 files changed, 27 insertions, 7 deletions
diff --git a/msg_socket2/src/ser.rs b/msg_socket2/src/ser.rs index 0a60ea8..7bffa22 100644 --- a/msg_socket2/src/ser.rs +++ b/msg_socket2/src/ser.rs @@ -1,20 +1,40 @@ use serde::Serializer; use std::os::unix::prelude::*; +pub trait SerializerWithFds { + type Ser: Serializer; + + fn serializer(self) -> Self::Ser; + fn fds(&mut self) -> &mut Vec<RawFd>; +} + pub trait SerializeWithFds { - fn serialize<Ser>(&self, serializer: SerializerWithFds<Ser>) -> Result<Ser::Ok, Ser::Error> - where - Ser: Serializer; + fn serialize<Ser: SerializerWithFds>( + &self, + serializer: Ser, + ) -> Result<<Ser::Ser as Serializer>::Ok, <Ser::Ser as Serializer>::Error>; } #[derive(Debug)] -pub struct SerializerWithFds<'fds, Ser> { - pub serializer: Ser, - pub fds: &'fds mut Vec<RawFd>, +pub struct SerializerWithFdsImpl<'fds, Ser> { + serializer: Ser, + fds: &'fds mut Vec<RawFd>, } -impl<'fds, Ser> SerializerWithFds<'fds, Ser> { +impl<'fds, Ser> SerializerWithFdsImpl<'fds, Ser> { pub fn new(fds: &'fds mut Vec<RawFd>, serializer: Ser) -> Self { Self { serializer, fds } } } + +impl<'fds, Ser: Serializer> SerializerWithFds for SerializerWithFdsImpl<'fds, Ser> { + type Ser = Ser; + + fn serializer(self) -> Self::Ser { + self.serializer + } + + fn fds(&mut self) -> &mut Vec<RawFd> { + &mut self.fds + } +} |