1use crate::VirtioVsockDevice;
7use virtio::resolve::ResolvedVirtioDevice;
8use virtio::resolve::VirtioResolveInput;
9use virtio_resources::vsock::VirtioVsockHandle;
10use vm_resource::ResolveResource;
11use vm_resource::declare_static_resolver;
12use vm_resource::kind::VirtioDeviceHandle;
13
14pub struct VirtioVsockResolver;
16
17declare_static_resolver! {
18 VirtioVsockResolver,
19 (VirtioDeviceHandle, VirtioVsockHandle),
20}
21
22impl ResolveResource<VirtioDeviceHandle, VirtioVsockHandle> for VirtioVsockResolver {
23 type Output = ResolvedVirtioDevice;
24 type Error = anyhow::Error;
25
26 fn resolve(
27 &self,
28 resource: VirtioVsockHandle,
29 input: VirtioResolveInput<'_>,
30 ) -> Result<Self::Output, Self::Error> {
31 let device = VirtioVsockDevice::new(
32 input.driver_source,
33 resource.guest_cid,
34 resource.base_path.into(),
35 resource.listener,
36 )?;
37 Ok(device.into())
38 }
39}