1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
//! Directory helpers. Contains [search] function, used to gather files from
//! directory recursively.
use crate::;
use ;
use Path;
use WalkDir;
/// Settings for [search] function.
///
/// If not sure what to set here, use [Default].
/// Searches fs recursively and builds [file_pack_path::FilePackPath] for each
/// file.
///
/// Traverses directory specified in `path` using [SearchOptions]. Builds all
/// found files as [file_pack_path::FilePackPath] using
/// [file::BuildFromPathOptions]. Paths are created by stripping `path` from
/// full file path.
///
/// # Examples
///
/// ```
/// # use anyhow::Error;
/// # use std::{collections::HashMap, path::PathBuf};
/// # use web_static_pack_packer::{
/// # directory::{search, SearchOptions},
/// # file::BuildFromPathOptions,
/// # };
/// #
/// # fn main() -> Result<(), Error> {
/// #
/// // traverse directory from tests
/// let files = search(
/// &PathBuf::from(env!("CARGO_MANIFEST_DIR"))
/// .parent()
/// .unwrap()
/// .join("tests")
/// .join("data")
/// .join("vcard-personal-portfolio")
/// .join("assets"),
/// &SearchOptions::default(),
/// &BuildFromPathOptions::default(),
/// )?;
///
/// // group files into hashmap {pack_path: file}
/// let files_by_path = files
/// .into_vec()
/// .into_iter()
/// .map(|file_pack_path| (file_pack_path.pack_path, file_pack_path.file))
/// .collect::<HashMap<_, _>>();
///
/// // verify necessary files were added
/// assert!(files_by_path.contains_key("/css/style.css"));
/// assert!(files_by_path.contains_key("/js/script.js"));
/// assert!(!files_by_path.contains_key("/index.html"));
/// #
/// # Ok(())
/// # }
/// ```