1use crate::Disk;
7use crate::DiskIo;
8use crate::InvalidDisk;
9use vm_resource::CanResolveTo;
10use vm_resource::kind::DiskHandleKind;
11use vmcore::vm_task::VmTaskDriverSource;
12
13impl CanResolveTo<ResolvedDisk> for DiskHandleKind {
14 type Input<'a> = ResolveDiskParameters<'a>;
15}
16
17#[derive(Copy, Clone)]
19pub struct ResolveDiskParameters<'a> {
20 pub read_only: bool,
22 pub driver_source: &'a VmTaskDriverSource,
24}
25
26pub struct ResolvedDisk(pub Disk);
28
29impl ResolvedDisk {
30 pub fn new<T: DiskIo>(disk: T) -> Result<Self, InvalidDisk> {
32 Ok(Self(Disk::new(disk)?))
33 }
34}