1use crate::VmbfsDevice;
7use crate::single_file_backing::VmbfsSingleFileBacking;
8use std::convert::Infallible;
9use vm_resource::ResolveResource;
10use vm_resource::declare_static_resolver;
11use vm_resource::kind::VmbusDeviceHandleKind;
12use vmbfs_resources::VmbfsImcDeviceHandle;
13use vmbus_channel::resources::ResolveVmbusDeviceHandleParams;
14use vmbus_channel::resources::ResolvedVmbusDevice;
15use vmbus_channel::simple::SimpleDeviceWrapper;
16
17pub struct VmbfsResolver;
19
20declare_static_resolver! {
21 VmbfsResolver,
22 (VmbusDeviceHandleKind, VmbfsImcDeviceHandle),
23}
24
25impl ResolveResource<VmbusDeviceHandleKind, VmbfsImcDeviceHandle> for VmbfsResolver {
26 type Output = ResolvedVmbusDevice;
27 type Error = Infallible;
28
29 fn resolve(
30 &self,
31 resource: VmbfsImcDeviceHandle,
32 input: ResolveVmbusDeviceHandleParams<'_>,
33 ) -> Result<Self::Output, Self::Error> {
34 let backing = VmbfsSingleFileBacking::new("imc.hiv", resource.file).unwrap();
35 let device = VmbfsDevice::new(Box::new(backing));
36 Ok(SimpleDeviceWrapper::new(input.driver_source.simple(), device).into())
37 }
38}