guest_crash_device/
resolver.rs

1// Copyright (c) Microsoft Corporation.
2// Licensed under the MIT License.
3
4//! Resolver implementation for the guest crash device.
5
6use crate::GuestCrashDevice;
7use get_resources::crash::GuestCrashDeviceHandle;
8use std::convert::Infallible;
9use vm_resource::ResolveResource;
10use vm_resource::declare_static_resolver;
11use vm_resource::kind::VmbusDeviceHandleKind;
12use vmbus_channel::resources::ResolveVmbusDeviceHandleParams;
13use vmbus_channel::resources::ResolvedVmbusDevice;
14use vmbus_channel::simple::SimpleDeviceWrapper;
15
16/// Resource resolver for [`GuestCrashDeviceHandle`].
17pub struct GuestCrashDeviceResolver;
18
19declare_static_resolver!(
20    GuestCrashDeviceResolver,
21    (VmbusDeviceHandleKind, GuestCrashDeviceHandle)
22);
23
24impl ResolveResource<VmbusDeviceHandleKind, GuestCrashDeviceHandle> for GuestCrashDeviceResolver {
25    type Output = ResolvedVmbusDevice;
26    type Error = Infallible;
27
28    fn resolve(
29        &self,
30        resource: GuestCrashDeviceHandle,
31        input: ResolveVmbusDeviceHandleParams<'_>,
32    ) -> Result<Self::Output, Self::Error> {
33        Ok(SimpleDeviceWrapper::new(
34            input.driver_source.simple(),
35            GuestCrashDevice::new(resource.request_dump, resource.max_dump_size),
36        )
37        .into())
38    }
39}