hugging_face_client/client/
collection.rs

1use reqwest::Method;
2
3use crate::{
4  api::{
5    CreateCollectionItemReq, CreateCollectionItemRes, CreateCollectionReq, DeleteCollectionItemReq,
6    DeleteCollectionItemRes, DeleteCollectionReq, DeleteCollectionRes, GetCollectionReq,
7    GetCollectionRes, GetCollectionsReq, GetCollectionsRes, ModifyCollectionItemReq,
8    ModifyCollectionItemRes, ModifyCollectionReq, ModifyCollectionRes,
9  },
10  client::Client,
11  errors::Result,
12};
13
14impl Client {
15  /// List collections from the Hub, based on some criteria
16  ///
17  /// Endpoint: `GET /api/collections`
18  pub async fn get_collections(&self, req: GetCollectionsReq<'_>) -> Result<GetCollectionsRes> {
19    let url = format!("{}/api/collections", &self.api_endpoint);
20    self.get_request(&url, Some(&req), false).await
21  }
22
23  /// Get information about a collection
24  ///
25  /// Endpoint: `GET /api/collections/{namespace}/{slug}-{id}`
26  pub async fn get_collection(&self, req: GetCollectionReq<'_>) -> Result<GetCollectionRes> {
27    let url = format!("{}/api/collections/{}", &self.api_endpoint, req.slug);
28    self.get_request(&url, self.empty_req(), false).await
29  }
30
31  /// Create a new collection on the Hub with a title
32  ///
33  /// Endpoint: `POST /api/collections`
34  pub async fn create_collection(&self, req: CreateCollectionReq<'_>) -> Result<GetCollectionRes> {
35    let url = format!("{}/api/collections", &self.api_endpoint);
36    self.exec_request(&url, Method::POST, Some(&req)).await
37  }
38
39  /// Delete a collection, cannot be restored.
40  ///
41  /// Endpoint: `DELETE /api/collections/{namespace}/{slug}-{id}`
42  pub async fn delete_collection(
43    &self,
44    req: DeleteCollectionReq<'_>,
45  ) -> Result<DeleteCollectionRes> {
46    let url = format!("{}/api/collections/{}", &self.api_endpoint, req.slug);
47    self.exec_request(&url, Method::DELETE, self.empty_req()).await
48  }
49
50  /// Update the metadata of a collection on the Hub
51  ///
52  /// Endpoint: `PATCH /api/collections/{namespace}/{slug}-{id}`
53  pub async fn modify_collection(
54    &self,
55    req: ModifyCollectionReq<'_>,
56  ) -> Result<ModifyCollectionRes> {
57    let url = format!("{}/api/collections/{}", &self.api_endpoint, req.slug);
58    self.exec_request(&url, Method::PATCH, Some(&req)).await
59  }
60
61  /// Add an item to a collection
62  ///
63  /// Endpoint: `POST /api/collections/{namespace}/{slug}-{id}/items`
64  pub async fn create_collection_item(
65    &self,
66    req: CreateCollectionItemReq<'_>,
67  ) -> Result<CreateCollectionItemRes> {
68    let url = format!(
69      "{}/api/collections/{}/items",
70      &self.api_endpoint, req.collection_slug
71    );
72    self.exec_request(&url, Method::POST, Some(&req)).await
73  }
74
75  /// Update an item in a collection
76  ///
77  /// Endpoint: `PATCH /api/collections/{namespace}/{slug}-{id}/items`
78  pub async fn modify_collection_item(
79    &self,
80    req: ModifyCollectionItemReq<'_>,
81  ) -> Result<ModifyCollectionItemRes> {
82    let url = format!(
83      "{}/api/collections/{}/items/{}",
84      &self.api_endpoint, req.collection_slug, req.item_id
85    );
86    self.exec_request(&url, Method::PATCH, Some(&req)).await
87  }
88
89  /// Remove an item from a collection
90  ///
91  /// Endpoint: `Delete /api/collections/{namespace}/{slug}-{id}/items`
92  pub async fn delete_collection_item(
93    &self,
94    req: DeleteCollectionItemReq<'_>,
95  ) -> Result<DeleteCollectionItemRes> {
96    let url = format!(
97      "{}/api/collections/{}/items/{}",
98      &self.api_endpoint, req.collection_slug, req.item_id
99    );
100    self.exec_request(&url, Method::DELETE, self.empty_req()).await
101  }
102}