You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
36 lines
1.1 KiB
36 lines
1.1 KiB
use crate::version::Version; |
|
use snafu::{ResultExt, Snafu}; |
|
use std::path::Path; |
|
|
|
pub fn list<P: AsRef<Path>>(installations_dir: P) -> Result<Vec<Version>, Error> { |
|
let mut vec = vec![]; |
|
for result_entry in installations_dir.as_ref().read_dir().context(IoError)? { |
|
let entry = result_entry.context(IoError)?; |
|
if entry |
|
.file_name() |
|
.to_str() |
|
.map(|s| s.starts_with(".")) |
|
.unwrap_or(false) |
|
{ |
|
continue; |
|
} |
|
|
|
let path = entry.path(); |
|
let filename = path |
|
.file_name() |
|
.ok_or_else(|| std::io::Error::from(std::io::ErrorKind::NotFound)) |
|
.context(IoError)? |
|
.to_str() |
|
.ok_or_else(|| std::io::Error::from(std::io::ErrorKind::NotFound)) |
|
.context(IoError)?; |
|
let version = Version::parse(filename).context(SemverError)?; |
|
vec.push(version); |
|
} |
|
Ok(vec) |
|
} |
|
|
|
#[derive(Debug, Snafu)] |
|
pub enum Error { |
|
IoError { source: std::io::Error }, |
|
SemverError { source: semver::Error }, |
|
}
|
|
|