blob: 7bffa2233109092672e34dc5a07d5bde6aaf5f56 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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: SerializerWithFds>(
&self,
serializer: Ser,
) -> Result<<Ser::Ser as Serializer>::Ok, <Ser::Ser as Serializer>::Error>;
}
#[derive(Debug)]
pub struct SerializerWithFdsImpl<'fds, Ser> {
serializer: Ser,
fds: &'fds mut Vec<RawFd>,
}
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
}
}
|