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;
10
11impl CanResolveTo<ResolvedDiskLayer> for DiskLayerHandleKind {
12    type Input<'a> = ResolveDiskLayerParameters<'a>;
13}
14
15/// Parameters used when resolving a disk layer resource.
16#[derive(Copy, Clone)]
17pub struct ResolveDiskLayerParameters<'a> {
18    /// Whether the layer is being opened for read-only use.
19    pub read_only: bool,
20    #[doc(hidden)]
21    // Workaround for async_trait not working well with GAT input parameters
22    // with missing lifetimes. Remove once we stop using async_trait for async
23    // resolvers.
24    pub _async_trait_workaround: &'a (),
25}
26
27/// A resolved [`DiskLayer`].
28pub struct ResolvedDiskLayer(pub DiskLayer);
29
30impl ResolvedDiskLayer {
31    /// Returns a resolved disk wrapping a backing object.
32    pub fn new<T: LayerAttach>(layer: T) -> Self {
33        Self(DiskLayer::new(layer))
34    }
35}