Clean up private helper methods

This commit is contained in:
Wojciech Kozlowski 2023-03-31 13:05:18 +09:00
parent 84b05567de
commit fdf3687d54

View File

@ -78,15 +78,39 @@ pub struct Beets {
executor: Box<dyn BeetsExecutor>, 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 { macro_rules! separator {
() => { () => {
"-*^-" "-*^-"
}; };
} }
impl Beets { impl LibraryPrivate for Beets {
const SEPARATOR: &str = separator!(); const CMD_LIST: &'static str = "ls";
const LIST_FORMAT: &str = concat!( const SEPARATOR: &'static str = separator!();
const LIST_FORMAT: &'static str = concat!(
"--format=", "--format=",
"$albumartist", "$albumartist",
separator!(), separator!(),
@ -101,8 +125,11 @@ impl Beets {
"$artist" "$artist"
); );
pub fn new(executor: Box<dyn BeetsExecutor>) -> Beets { fn list_cmd_and_args(query: &Query) -> Vec<String> {
Beets { executor } 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> { fn list_to_albums(list_output: Vec<String>) -> Result<Vec<Album>, Error> {
@ -147,22 +174,11 @@ impl Beets {
}); });
} }
} }
Ok(albums) 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 { pub struct SystemExecutor {
bin: String, bin: String,
} }