summary refs log tree commit diff
path: root/vm_control/src/lib.rs
diff options
context:
space:
mode:
authorAlyssa Ross <hi@alyssa.is>2020-06-14 20:39:56 +0000
committerAlyssa Ross <hi@alyssa.is>2020-06-15 09:37:11 +0000
commit2885f9ca1a79d30421deeb025e92ae0118fc6d3a (patch)
tree7652ba6fed40f3f1add54afc9fe799c7646bf126 /vm_control/src/lib.rs
parent81f96554ebf490c83a8993065de9b1636b26f916 (diff)
downloadcrosvm-2885f9ca1a79d30421deeb025e92ae0118fc6d3a.tar
crosvm-2885f9ca1a79d30421deeb025e92ae0118fc6d3a.tar.gz
crosvm-2885f9ca1a79d30421deeb025e92ae0118fc6d3a.tar.bz2
crosvm-2885f9ca1a79d30421deeb025e92ae0118fc6d3a.tar.lz
crosvm-2885f9ca1a79d30421deeb025e92ae0118fc6d3a.tar.xz
crosvm-2885f9ca1a79d30421deeb025e92ae0118fc6d3a.tar.zst
crosvm-2885f9ca1a79d30421deeb025e92ae0118fc6d3a.zip
recursive serialization
Diffstat (limited to 'vm_control/src/lib.rs')
-rw-r--r--vm_control/src/lib.rs8
1 files changed, 5 insertions, 3 deletions
diff --git a/vm_control/src/lib.rs b/vm_control/src/lib.rs
index 3d92c8b..3ec6be7 100644
--- a/vm_control/src/lib.rs
+++ b/vm_control/src/lib.rs
@@ -20,20 +20,22 @@ use libc::{EINVAL, EIO, ENODEV};
 
 use kvm::{IrqRoute, IrqSource, Vm};
 use msg_socket::{MsgError, MsgOnSocket, MsgResult, MsgSocket, UnixSeqpacketExt};
+use msg_socket2_derive::SerializeWithFds;
 use resources::{Alloc, GpuMemoryDesc, MmioType, SystemAllocator};
 use sys_util::net::UnixSeqpacket;
 use sys_util::{error, Error as SysError, EventFd, GuestAddress, MemoryMapping, MmapError, Result};
 
 /// A data structure that either owns or borrows a file descriptor.
-#[derive(Debug)]
-pub enum MaybeOwnedFd<Owned> {
+#[derive(SerializeWithFds, Debug)]
+#[msg_socket2(strategy = "AsRawFd")]
+pub enum MaybeOwnedFd<Owned: AsRawFd> {
     /// Owned by this enum variant, and will be destructed automatically if not moved out.
     Owned(Owned),
     /// A file descriptor borrwed by this enum.
     Borrowed(RawFd),
 }
 
-impl<Owned> MaybeOwnedFd<Owned> {
+impl<Owned: AsRawFd> MaybeOwnedFd<Owned> {
     pub fn new_borrowed(fd: &dyn AsRawFd) -> Self {
         Self::Borrowed(fd.as_raw_fd())
     }