use crate::commands::CmdResult;
use crate::error::Result;
use crate::index::PadSelector;
use crate::model::Scope;
use crate::store::{Bucket, DataStore};
use super::helpers::resolve_selectors;
pub fn run<S: DataStore>(store: &S, scope: Scope, selectors: &[PadSelector]) -> Result<CmdResult> {
let resolved = resolve_selectors(store, scope, selectors, false)?;
let mut paths = Vec::with_capacity(resolved.len());
for (_, uuid) in resolved {
let path = store.get_pad_path(&uuid, scope, Bucket::Active)?;
paths.push(path);
}
Ok(CmdResult::default().with_pad_paths(paths))
}
#[cfg(test)]
mod tests {
use super::*;
use crate::commands::create;
use crate::index::DisplayIndex;
use crate::model::Scope;
use crate::store::bucketed::BucketedStore;
use crate::store::mem_backend::MemBackend;
#[test]
fn test_get_path() {
let mut store = BucketedStore::new(
MemBackend::new(),
MemBackend::new(),
MemBackend::new(),
MemBackend::new(),
);
create::run(&mut store, Scope::Project, "Pad A".into(), "".into(), None).unwrap();
let res = run(
&store,
Scope::Project,
&[PadSelector::Path(vec![DisplayIndex::Regular(1)])],
)
.unwrap();
assert_eq!(res.pad_paths.len(), 1);
assert!(!res.pad_paths[0].as_os_str().is_empty());
}
#[test]
fn test_get_multiple_paths() {
let mut store = BucketedStore::new(
MemBackend::new(),
MemBackend::new(),
MemBackend::new(),
MemBackend::new(),
);
create::run(&mut store, Scope::Project, "Pad A".into(), "".into(), None).unwrap();
create::run(&mut store, Scope::Project, "Pad B".into(), "".into(), None).unwrap();
let res = run(
&store,
Scope::Project,
&[
PadSelector::Path(vec![DisplayIndex::Regular(1)]),
PadSelector::Path(vec![DisplayIndex::Regular(2)]),
],
)
.unwrap();
assert_eq!(res.pad_paths.len(), 2);
}
}