1use crate::config::Config;
2use crate::{Error, ErrorKind, Result};
3use std::fs;
4use structopt::StructOpt;
5
6#[derive(Debug, StructOpt)]
7pub struct StudiesOpt {}
8
9pub fn list_studies(_opt: StudiesOpt, config: &Config) -> Result<Vec<String>> {
10 let mut names = Vec::new();
11
12 let dir = track!(config.data_dir())?;
13 for entry in track!(fs::read_dir(&dir).map_err(Error::from))? {
14 let entry = track!(entry.map_err(Error::from))?;
15 if !track!(entry.file_type().map_err(Error::from))?.is_dir() {
16 continue;
17 }
18
19 let name = track_assert_some!(
20 entry
21 .path()
22 .file_name()
23 .and_then(|n| n.to_str())
24 .map(|n| n.to_owned()),
25 ErrorKind::InvalidInput
26 );
27 names.push(name);
28 }
29
30 Ok(names)
31}