disklayer_sqlite/
resolver.rs1use super::SqliteDiskLayer;
7use crate::FormatOnAttachSqliteDiskLayer;
8use crate::auto_cache::AutoCacheSqliteDiskLayer;
9use disk_backend_resources::layer::SqliteAutoCacheDiskLayerHandle;
10use disk_backend_resources::layer::SqliteDiskLayerFormatParams;
11use disk_backend_resources::layer::SqliteDiskLayerHandle;
12use disk_layered::resolve::ResolveDiskLayerParameters;
13use disk_layered::resolve::ResolvedDiskLayer;
14use vm_resource::ResolveResource;
15use vm_resource::declare_static_resolver;
16use vm_resource::kind::DiskLayerHandleKind;
17
18pub struct SqliteDiskLayerResolver;
20
21declare_static_resolver!(
22 SqliteDiskLayerResolver,
23 (DiskLayerHandleKind, SqliteDiskLayerHandle),
24 (DiskLayerHandleKind, SqliteAutoCacheDiskLayerHandle)
25);
26
27impl ResolveResource<DiskLayerHandleKind, SqliteDiskLayerHandle> for SqliteDiskLayerResolver {
28 type Output = ResolvedDiskLayer;
29 type Error = anyhow::Error;
30
31 fn resolve(
32 &self,
33 rsrc: SqliteDiskLayerHandle,
34 input: ResolveDiskLayerParameters<'_>,
35 ) -> Result<Self::Output, Self::Error> {
36 let SqliteDiskLayerHandle {
37 dbhd_path,
38 format_dbhd,
39 } = rsrc;
40
41 let layer = if let Some(SqliteDiskLayerFormatParams {
42 logically_read_only,
43 len,
44 }) = format_dbhd
45 {
46 ResolvedDiskLayer::new(FormatOnAttachSqliteDiskLayer::new(
47 dbhd_path.into(),
48 input.read_only,
49 crate::IncompleteFormatParams {
50 logically_read_only,
51 len,
52 },
53 ))
54 } else {
55 ResolvedDiskLayer::new(SqliteDiskLayer::new(
56 dbhd_path.as_ref(),
57 input.read_only,
58 None,
59 )?)
60 };
61
62 Ok(layer)
63 }
64}
65
66impl ResolveResource<DiskLayerHandleKind, SqliteAutoCacheDiskLayerHandle>
67 for SqliteDiskLayerResolver
68{
69 type Output = ResolvedDiskLayer;
70 type Error = anyhow::Error;
71
72 fn resolve(
73 &self,
74 rsrc: SqliteAutoCacheDiskLayerHandle,
75 input: ResolveDiskLayerParameters<'_>,
76 ) -> Result<Self::Output, Self::Error> {
77 Ok(ResolvedDiskLayer::new(AutoCacheSqliteDiskLayer::new(
78 rsrc.cache_path.into(),
79 rsrc.cache_key,
80 input.read_only,
81 )))
82 }
83}