1use 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
14pub 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}