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

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 },
}