disklayer_ram/
resolver.rs

1// Copyright (c) Microsoft Corporation.
2// Licensed under the MIT License.
3
4//! Resource resolver for RAM-backed disk layers.
5
6use crate::LazyRamDiskLayer;
7use disk_backend_resources::layer::RamDiskLayerHandle;
8use disk_layered::resolve::ResolveDiskLayerParameters;
9use disk_layered::resolve::ResolvedDiskLayer;
10use vm_resource::ResolveResource;
11use vm_resource::declare_static_resolver;
12use vm_resource::kind::DiskLayerHandleKind;
13
14/// Resolver for a [`RamDiskLayerHandle`].
15pub struct RamDiskLayerResolver;
16
17declare_static_resolver!(
18    RamDiskLayerResolver,
19    (DiskLayerHandleKind, RamDiskLayerHandle)
20);
21
22impl ResolveResource<DiskLayerHandleKind, RamDiskLayerHandle> for RamDiskLayerResolver {
23    type Output = ResolvedDiskLayer;
24    type Error = std::convert::Infallible;
25
26    fn resolve(
27        &self,
28        rsrc: RamDiskLayerHandle,
29        _input: ResolveDiskLayerParameters<'_>,
30    ) -> Result<Self::Output, Self::Error> {
31        let mut layer = LazyRamDiskLayer::new();
32        if let Some(len) = rsrc.len {
33            layer = layer.with_len(len);
34        }
35        if let Some(sector_size) = rsrc.sector_size {
36            layer = layer.with_sector_size(sector_size);
37        }
38        Ok(ResolvedDiskLayer::new(layer))
39    }
40}