harbor_api/apis/
search_api.rs

1/*
2 * Harbor API
3 *
4 * These APIs provide services for manipulating Harbor project.
5 *
6 * The version of the OpenAPI document: 2.0
7 * 
8 * Generated by: https://openapi-generator.tech
9 */
10
11
12use reqwest;
13use serde::{Deserialize, Serialize, de::Error as _};
14use crate::{apis::ResponseContent, models};
15use super::{Error, configuration, ContentType};
16
17/// struct for passing parameters to the method [`search`]
18#[derive(Clone, Debug)]
19pub struct SearchParams {
20    /// Search parameter for project and repository name.
21    pub q: String,
22    /// An unique ID for the request
23    pub x_request_id: Option<String>
24}
25
26
27/// struct for typed errors of method [`search`]
28#[derive(Debug, Clone, Serialize, Deserialize)]
29#[serde(untagged)]
30pub enum SearchError {
31    Status500(models::Errors),
32    UnknownValue(serde_json::Value),
33}
34
35
36/// The Search endpoint returns information about the projects and repositories offered at public status or related to the current logged in user. The response includes the project and repository list in a proper display order.
37pub async fn search(configuration: &configuration::Configuration, params: SearchParams) -> Result<models::Search, Error<SearchError>> {
38
39    let uri_str = format!("{}/search", configuration.base_path);
40    let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
41
42    req_builder = req_builder.query(&[("q", &params.q.to_string())]);
43    if let Some(ref user_agent) = configuration.user_agent {
44        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
45    }
46    if let Some(param_value) = params.x_request_id {
47        req_builder = req_builder.header("X-Request-Id", param_value.to_string());
48    }
49    if let Some(ref auth_conf) = configuration.basic_auth {
50        req_builder = req_builder.basic_auth(auth_conf.0.to_owned(), auth_conf.1.to_owned());
51    };
52
53    let req = req_builder.build()?;
54    let resp = configuration.client.execute(req).await?;
55
56    let status = resp.status();
57    let content_type = resp
58        .headers()
59        .get("content-type")
60        .and_then(|v| v.to_str().ok())
61        .unwrap_or("application/octet-stream");
62    let content_type = super::ContentType::from(content_type);
63
64    if !status.is_client_error() && !status.is_server_error() {
65        let content = resp.text().await?;
66        match content_type {
67            ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
68            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::Search`"))),
69            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::Search`")))),
70        }
71    } else {
72        let content = resp.text().await?;
73        let entity: Option<SearchError> = serde_json::from_str(&content).ok();
74        Err(Error::ResponseError(ResponseContent { status, content, entity }))
75    }
76}
77