phpup/
version.rs

1use crate::config::Config;
2use itertools::Itertools;
3
4pub fn installed(config: &Config) -> impl Iterator<Item = Version> {
5    let versions_dir = config.versions_dir();
6    std::fs::read_dir(&versions_dir)
7        .unwrap()
8        .flatten()
9        .flat_map(|path| path.path().file_name().map(ToOwned::to_owned))
10        .flat_map(|dir_os_str| dir_os_str.into_string())
11        .flat_map(|dir_str| dir_str.parse::<Version>())
12        .filter(|version| {
13            versions_dir
14                .join(version.to_string())
15                // TODO: windows
16                .join("bin")
17                .join("php")
18                .is_file()
19        })
20        .sorted()
21}
22
23pub fn installed_by<'a>(
24    version: &'a Version,
25    config: &Config,
26) -> impl Iterator<Item = Version> + 'a {
27    installed(config).filter(|v| version.includes(v))
28}
29
30pub fn latest_installed_by(version: &Version, config: &Config) -> Option<Version> {
31    installed_by(version, config).max()
32}
33
34pub mod alias;
35pub mod file;
36pub mod local;
37pub mod semantic;
38pub mod system;
39
40pub use alias::Alias;
41pub use file::File;
42pub use local::Local;
43pub use semantic::Version;