2020-12-05 22:20:08 +01:00
|
|
|
use anyhow::Result;
|
2020-12-05 22:21:00 +01:00
|
|
|
use reqwest::Client;
|
2020-12-05 22:20:08 +01:00
|
|
|
|
2020-12-20 20:52:22 +01:00
|
|
|
use crate::util::{self, api, MemeSorting};
|
2020-12-05 22:20:08 +01:00
|
|
|
|
2020-12-20 20:52:22 +01:00
|
|
|
pub async fn run(
|
|
|
|
http: &Client,
|
|
|
|
cat: Option<String>,
|
|
|
|
user: Option<String>,
|
|
|
|
sorting: Option<MemeSorting>,
|
|
|
|
) -> Result<()> {
|
2020-12-19 19:43:23 +01:00
|
|
|
let memes = api::memes(http).await?;
|
2020-12-05 22:20:08 +01:00
|
|
|
|
2020-12-18 16:58:53 +01:00
|
|
|
let memes = memes
|
2020-12-20 20:52:22 +01:00
|
|
|
.into_iter()
|
2020-12-18 16:58:53 +01:00
|
|
|
.filter(|&m| cat.as_ref().map(|q| &m.category == q).unwrap_or(true))
|
|
|
|
.filter(|&m| user.as_ref().map(|q| &m.user == q).unwrap_or(true));
|
|
|
|
|
2020-12-20 20:52:22 +01:00
|
|
|
let mut memes = memes.collect::<Vec<_>>();
|
|
|
|
|
|
|
|
if let Some(s) = sorting {
|
|
|
|
s.sort_with(&mut memes);
|
|
|
|
}
|
|
|
|
|
2020-12-05 22:20:08 +01:00
|
|
|
let mut table = util::list_table();
|
2020-12-18 16:58:53 +01:00
|
|
|
|
2020-12-05 22:20:08 +01:00
|
|
|
for m in memes {
|
|
|
|
table.add_row(m.into());
|
|
|
|
}
|
|
|
|
|
|
|
|
println!("{}", table.render());
|
|
|
|
|
|
|
|
Ok(())
|
2020-12-05 22:21:00 +01:00
|
|
|
}
|