Resolve "Local collection trait and beets implementation" #9

Merged
wojtek merged 12 commits from 4---local-collection-trait-and-beets-implementation into main 2023-03-31 14:24:54 +02:00
Showing only changes of commit fdf3687d54 - Show all commits

View File

@ -78,15 +78,39 @@ pub struct Beets {
executor: Box<dyn BeetsExecutor>,
}
impl Beets {
pub fn new(executor: Box<dyn BeetsExecutor>) -> Beets {
Beets { executor }
}
}
trait LibraryPrivate {
const CMD_LIST: &'static str;
const SEPARATOR: &'static str;
const LIST_FORMAT: &'static str;
fn list_cmd_and_args(query: &Query) -> Vec<String>;
fn list_to_albums(list_output: Vec<String>) -> Result<Vec<Album>, Error>;
}
impl Library for Beets {
fn list(&mut self, query: &Query) -> Result<Vec<Album>, Error> {
let cmd = Self::list_cmd_and_args(query);
let output = self.executor.exec(cmd)?;
Self::list_to_albums(output)
}
}
macro_rules! separator {
() => {
"-*^-"
};
}
impl Beets {
const SEPARATOR: &str = separator!();
const LIST_FORMAT: &str = concat!(
impl LibraryPrivate for Beets {
const CMD_LIST: &'static str = "ls";
const SEPARATOR: &'static str = separator!();
const LIST_FORMAT: &'static str = concat!(
"--format=",
"$albumartist",
separator!(),
@ -101,8 +125,11 @@ impl Beets {
"$artist"
);
pub fn new(executor: Box<dyn BeetsExecutor>) -> Beets {
Beets { executor }
fn list_cmd_and_args(query: &Query) -> Vec<String> {
let mut cmd: Vec<String> = vec![String::from(Self::CMD_LIST)];
cmd.push(Self::LIST_FORMAT.to_string());
cmd.append(&mut query.to_args());
cmd
}
fn list_to_albums(list_output: Vec<String>) -> Result<Vec<Album>, Error> {
@ -147,22 +174,11 @@ impl Beets {
});
}
}
Ok(albums)
}
}
impl Library for Beets {
fn list(&mut self, query: &Query) -> Result<Vec<Album>, Error> {
let mut arguments: Vec<String> = vec![String::from("ls")];
arguments.push(Self::LIST_FORMAT.to_string());
arguments.append(&mut query.to_args());
let output = self.executor.exec(arguments)?;
Self::list_to_albums(output)
}
}
pub struct SystemExecutor {
bin: String,
}