disk_layered/
resolve.rs

1// Copyright (c) Microsoft Corporation.
2// Licensed under the MIT License.
3
4//! Resolver-related definitions for disk layer resources.
5
6use super::DiskLayer;
7use crate::LayerAttach;
8use vm_resource::CanResolveTo;
9use vm_resource::kind::DiskLayerHandleKind;
10use vmcore::vm_task::VmTaskDriverSource;
11
12impl CanResolveTo<ResolvedDiskLayer> for DiskLayerHandleKind {
13    type Input<'a> = ResolveDiskLayerParameters<'a>;
14}
15
16/// Parameters used when resolving a disk layer resource.
17#[derive(Copy, Clone)]
18pub struct ResolveDiskLayerParameters<'a> {
19    /// Whether the layer is being opened for read-only use.
20    pub read_only: bool,
21    /// The task driver source for the VM.
22    pub driver_source: &'a VmTaskDriverSource,
23}
24
25/// A resolved [`DiskLayer`].
26pub struct ResolvedDiskLayer(pub DiskLayer);
27
28impl ResolvedDiskLayer {
29    /// Returns a resolved disk wrapping a backing object.
30    pub fn new<T: LayerAttach>(layer: T) -> Self {
31        Self(DiskLayer::new(layer))
32    }
33}