disklayer_ram/
resolver.rs1use super::Error;
7use super::RamDiskLayer;
8use crate::LazyRamDiskLayer;
9use disk_backend_resources::layer::RamDiskLayerHandle;
10use disk_layered::resolve::ResolveDiskLayerParameters;
11use disk_layered::resolve::ResolvedDiskLayer;
12use vm_resource::ResolveResource;
13use vm_resource::declare_static_resolver;
14use vm_resource::kind::DiskLayerHandleKind;
15
16pub struct RamDiskLayerResolver;
18
19declare_static_resolver!(
20 RamDiskLayerResolver,
21 (DiskLayerHandleKind, RamDiskLayerHandle)
22);
23
24#[derive(Debug, Error)]
26pub enum ResolveRamDiskError {
27 #[error("failed to create ram disk layer")]
29 Ram(#[source] Error),
30}
31
32impl ResolveResource<DiskLayerHandleKind, RamDiskLayerHandle> for RamDiskLayerResolver {
33 type Output = ResolvedDiskLayer;
34 type Error = ResolveRamDiskError;
35
36 fn resolve(
37 &self,
38 rsrc: RamDiskLayerHandle,
39 _input: ResolveDiskLayerParameters<'_>,
40 ) -> Result<Self::Output, Self::Error> {
41 Ok(match rsrc.len {
42 Some(len) => {
43 ResolvedDiskLayer::new(RamDiskLayer::new(len).map_err(ResolveRamDiskError::Ram)?)
44 }
45 None => ResolvedDiskLayer::new(LazyRamDiskLayer::new()),
46 })
47 }
48}