junobuild_storage/
heap_utils.rs1use 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}