wasmer_package/package/volume/
mod.rs

1pub(crate) mod fs;
2pub(crate) mod in_memory;
3
4use std::{fmt::Debug, sync::Arc};
5
6use anyhow::Error;
7
8use webc::{v3::write::Directory, AbstractVolume};
9
10use super::Strictness;
11
12pub trait IntoSuper<Super: ?Sized> {
13    fn into_super(self: Arc<Self>) -> Arc<Super>;
14}
15
16impl<T: AbstractVolume + Send + Sync + 'static>
17    IntoSuper<dyn AbstractVolume + Send + Sync + 'static> for T
18{
19    fn into_super(self: Arc<Self>) -> Arc<dyn AbstractVolume + Send + Sync + 'static> {
20        self
21    }
22}
23
24/// An abstraction over concrete volumes implementation to be used in a Wasmer Package.
25pub trait WasmerPackageVolume:
26    AbstractVolume
27    + Send
28    + Sync
29    + 'static
30    + Debug
31    + IntoSuper<dyn AbstractVolume + Send + Sync + 'static>
32{
33    fn as_volume(self: Arc<Self>) -> Arc<dyn AbstractVolume + Send + Sync + 'static> {
34        self.into_super()
35    }
36
37    /// Serialize the volume as a [`webc::v3::write::Directory`].  
38    fn as_directory_tree(&self, strictness: Strictness) -> Result<Directory<'_>, Error>;
39}