spotify_cli/cli/commands/
categories.rs1use crate::endpoints::categories::{
2 get_category_playlists, get_several_browse_categories, get_single_browse_category,
3};
4use crate::io::output::{ErrorKind, Response};
5
6use super::with_client;
7
8pub async fn category_list(limit: u8, offset: u32) -> Response {
9 with_client(|client| async move {
10 match get_several_browse_categories::get_several_browse_categories(
11 &client,
12 Some(limit),
13 Some(offset),
14 )
15 .await
16 {
17 Ok(Some(payload)) => Response::success_with_payload(200, "Browse categories", payload),
18 Ok(None) => Response::success_with_payload(
19 200,
20 "No categories found",
21 serde_json::json!({ "categories": { "items": [] } }),
22 ),
23 Err(e) => Response::from_http_error(&e, "Failed to get categories"),
24 }
25 })
26 .await
27}
28
29pub async fn category_get(category_id: &str) -> Response {
30 let category_id = category_id.to_string();
31
32 with_client(|client| async move {
33 match get_single_browse_category::get_single_browse_category(&client, &category_id).await {
34 Ok(Some(payload)) => Response::success_with_payload(200, "Category details", payload),
35 Ok(None) => Response::err(404, "Category not found", ErrorKind::NotFound),
36 Err(e) => Response::from_http_error(&e, "Failed to get category"),
37 }
38 })
39 .await
40}
41
42pub async fn category_playlists(category_id: &str, limit: u8, offset: u32) -> Response {
43 let category_id = category_id.to_string();
44
45 with_client(|client| async move {
46 match get_category_playlists::get_category_playlists(
47 &client,
48 &category_id,
49 Some(limit),
50 Some(offset),
51 )
52 .await
53 {
54 Ok(Some(payload)) => Response::success_with_payload(
55 200,
56 format!("Playlists for {}", category_id),
57 payload,
58 ),
59 Ok(None) => Response::success_with_payload(
60 200,
61 "No playlists found",
62 serde_json::json!({ "playlists": { "items": [] } }),
63 ),
64 Err(e) => Response::from_http_error(&e, "Failed to get category playlists"),
65 }
66 })
67 .await
68}