junobuild_storage/
heap_utils.rs

1use crate::types::state::{AssetsHeap, FullPath};
2use crate::types::store::Asset;
3use crate::utils::should_include_asset_for_deletion;
4use junobuild_collections::types::core::CollectionKey;
5
6pub fn collect_assets_heap<'a>(
7    collection: &CollectionKey,
8    assets: &'a AssetsHeap,
9) -> Vec<(&'a FullPath, &'a Asset)> {
10    assets
11        .iter()
12        .filter_map(|(_, asset)| filter_assets_heap(asset, collection))
13        .collect()
14}
15
16pub fn collect_delete_assets_heap(
17    collection: &CollectionKey,
18    assets: &AssetsHeap,
19) -> Vec<FullPath> {
20    collect_assets_heap(collection, assets)
21        .iter()
22        .filter(|(_, asset)| should_include_asset_for_deletion(collection, &asset.key.full_path))
23        .map(|(_, asset)| asset.key.full_path.clone())
24        .collect()
25}
26
27pub fn count_assets_heap(collection: &CollectionKey, assets: &AssetsHeap) -> usize {
28    assets
29        .iter()
30        .filter_map(|(_, asset)| filter_assets_heap(asset, collection))
31        .count()
32}
33
34fn filter_assets_heap<'a>(
35    asset: &'a Asset,
36    collection: &CollectionKey,
37) -> Option<(&'a FullPath, &'a Asset)> {
38    if &asset.key.collection == collection {
39        Some((&asset.key.full_path, asset))
40    } else {
41        None
42    }
43}