disk_delay/
resolver.rs

1// Copyright (c) Microsoft Corporation.
2// Licensed under the MIT License.
3
4use crate::DelayDisk;
5use async_trait::async_trait;
6use disk_backend::resolve::ResolveDiskParameters;
7use disk_backend::resolve::ResolvedDisk;
8use disk_backend_resources::DelayDiskHandle;
9use vm_resource::AsyncResolveResource;
10use vm_resource::ResourceResolver;
11use vm_resource::declare_static_async_resolver;
12use vm_resource::kind::DiskHandleKind;
13
14/// A resolver for DelayDisk.
15pub struct DelayDiskResolver;
16declare_static_async_resolver!(DelayDiskResolver, (DiskHandleKind, DelayDiskHandle));
17
18#[async_trait]
19impl AsyncResolveResource<DiskHandleKind, DelayDiskHandle> for DelayDiskResolver {
20    type Output = ResolvedDisk;
21    type Error = anyhow::Error;
22
23    async fn resolve(
24        &self,
25        resolver: &ResourceResolver,
26        rsrc: DelayDiskHandle,
27        input: ResolveDiskParameters<'_>,
28    ) -> Result<Self::Output, Self::Error> {
29        let inner = resolver.resolve(rsrc.disk, input).await?;
30
31        ResolvedDisk::new(DelayDisk::new(rsrc.delay, inner.0, input.driver_source))
32            .map_err(|e| anyhow::anyhow!("failed to create the delay disk: {}", e))
33    }
34}