trussed_staging/
fs_info.rs1use trussed::{
5 serde_extensions::ExtensionImpl, service::ServiceResources, store::Store, types::CoreContext,
6 Platform,
7};
8use trussed_core::Error;
9use trussed_fs_info::{
10 BlockInfo, FsInfoExtension, FsInfoExtensionReply, FsInfoExtensionRequest, FsInfoReply,
11};
12
13impl ExtensionImpl<FsInfoExtension> for super::StagingBackend {
14 fn extension_request<P: Platform>(
15 &mut self,
16 _core_ctx: &mut CoreContext,
17 _backend_ctx: &mut Self::Context,
18 request: &FsInfoExtensionRequest,
19 resources: &mut ServiceResources<P>,
20 ) -> Result<FsInfoExtensionReply, Error> {
21 match request {
22 FsInfoExtensionRequest::FsInfo(req) => {
23 let platform = resources.platform();
24 let store = platform.store();
25 let fs = store.fs(req.location);
26 Ok(FsInfoReply {
27 block_info: Some(BlockInfo {
28 total: fs.total_blocks(),
29 available: fs.available_blocks().map_err(|_| Error::InternalError)?,
30 size: fs.total_space() / fs.total_blocks(),
31 }),
32 available_space: fs.available_space().map_err(|_| Error::InternalError)?,
33 }
34 .into())
35 }
36 }
37 }
38}