jinxapi_github/v1_1_4/request/
search_topics.rs

1//! Search topics
2//! 
3//! Find topics via various criteria. Results are sorted by best match. This method returns up to 100 results [per page](https://docs.github.com/rest/overview/resources-in-the-rest-api#pagination). See "[Searching topics](https://docs.github.com/articles/searching-topics/)" for a detailed list of qualifiers.
4//! 
5//! When searching for topics, you can get text match metadata for the topic's **short\_description**, **description**, **name**, or **display\_name** field when you pass the `text-match` media type. For more details about how to receive highlighted search results, see [Text match metadata](https://docs.github.com/rest/reference/search#text-match-metadata).
6//! 
7//! For example, if you want to search for topics related to Ruby that are featured on <https://github.com/topics> your query might look like this:
8//! 
9//! `q=ruby+is:featured`
10//! 
11//! This query searches for topics with the keyword `ruby` and limits the results to find only topics that are featured. The topics that are the best match for the query appear first in the search results.
12//! 
13//! [API method documentation](https://docs.github.com/rest/reference/search#search-topics)
14
15
16fn url_string(
17    base_url: &str,
18    q_q: &str,
19    q_per_page: ::std::option::Option<i64>,
20    q_page: ::std::option::Option<i64>,
21) -> Result<String, crate::v1_1_4::ApiError> {
22    let trimmed = if base_url.is_empty() {
23        "https://api.github.com"
24    } else {
25        base_url.trim_end_matches('/')
26    };
27    let mut url = String::with_capacity(trimmed.len() + 34);
28    url.push_str(trimmed);
29    url.push_str("/search/topics");
30    url.push('?');
31    ::querylizer::Form::extend(&mut url, "q", &q_q, false, &::querylizer::encode_query)?;
32    if let Some(value) = &q_per_page {
33        url.push('&');
34        ::querylizer::Form::extend(&mut url, "per_page", value, false, &::querylizer::encode_query)?;
35    }
36    if let Some(value) = &q_page {
37        url.push('&');
38        ::querylizer::Form::extend(&mut url, "page", value, false, &::querylizer::encode_query)?;
39    }
40    Ok(url)
41}
42
43#[cfg(feature = "hyper")]
44pub fn http_builder(
45    base_url: &str,
46    q_q: &str,
47    q_per_page: ::std::option::Option<i64>,
48    q_page: ::std::option::Option<i64>,
49    h_user_agent: &str,
50    h_accept: ::std::option::Option<&str>,
51) -> Result<::http::request::Builder, crate::v1_1_4::ApiError> {
52    let url = url_string(
53        base_url,
54        q_q,
55        q_per_page,
56        q_page,
57    )?;
58    let mut builder = ::http::request::Request::get(url);
59    builder = builder.header(
60        "User-Agent",
61        &::querylizer::Simple::to_string(&h_user_agent, false, &::querylizer::passthrough)?
62    );
63    if let Some(value) = &h_accept {
64        builder = builder.header(
65            "Accept",
66            &::querylizer::Simple::to_string(value, false, &::querylizer::passthrough)?
67        );
68    }
69    Ok(builder)
70}
71
72#[cfg(feature = "hyper")]
73#[inline]
74pub fn hyper_request(
75    builder: ::http::request::Builder,
76) -> Result<::http::request::Request<::hyper::Body>, crate::v1_1_4::ApiError> {
77    Ok(builder.body(::hyper::Body::empty())?)
78}
79
80#[cfg(feature = "reqwest")]
81pub fn reqwest_builder(
82    base_url: &str,
83    q_q: &str,
84    q_per_page: ::std::option::Option<i64>,
85    q_page: ::std::option::Option<i64>,
86    h_user_agent: &str,
87    h_accept: ::std::option::Option<&str>,
88) -> Result<::reqwest::Request, crate::v1_1_4::ApiError> {
89    let url = url_string(
90        base_url,
91        q_q,
92        q_per_page,
93        q_page,
94    )?;
95    let reqwest_url = ::reqwest::Url::parse(&url)?;
96    let mut request = ::reqwest::Request::new(::reqwest::Method::GET, reqwest_url);
97    let headers = request.headers_mut();
98    headers.append(
99        "User-Agent",
100        ::querylizer::Simple::to_string(&h_user_agent, false, &::querylizer::passthrough)?.try_into()?
101    );
102    if let Some(value) = &h_accept {
103        headers.append(
104            "Accept",
105            ::querylizer::Simple::to_string(value, false, &::querylizer::passthrough)?.try_into()?
106        );
107    }
108    Ok(request)
109}
110
111#[cfg(feature = "reqwest")]
112#[inline(always)]
113pub fn reqwest_request(
114    builder: ::reqwest::Request,
115) -> Result<::reqwest::Request, crate::v1_1_4::ApiError>
116{
117    Ok(builder)
118}
119
120#[cfg(feature = "reqwest-blocking")]
121pub fn reqwest_blocking_builder(
122    base_url: &str,
123    q_q: &str,
124    q_per_page: ::std::option::Option<i64>,
125    q_page: ::std::option::Option<i64>,
126    h_user_agent: &str,
127    h_accept: ::std::option::Option<&str>,
128) -> Result<::reqwest::blocking::Request, crate::v1_1_4::ApiError> {
129    let url = url_string(
130        base_url,
131        q_q,
132        q_per_page,
133        q_page,
134    )?;
135    let reqwest_url = ::reqwest::Url::parse(&url)?;
136    let mut request = ::reqwest::blocking::Request::new(::reqwest::Method::GET, reqwest_url);
137    let headers = request.headers_mut();
138    headers.append(
139        "User-Agent",
140        ::querylizer::Simple::to_string(&h_user_agent, false, &::querylizer::passthrough)?.try_into()?
141    );
142    if let Some(value) = &h_accept {
143        headers.append(
144            "Accept",
145            ::querylizer::Simple::to_string(value, false, &::querylizer::passthrough)?.try_into()?
146        );
147    }
148    Ok(request)
149}
150
151#[cfg(feature = "reqwest-blocking")]
152#[inline(always)]
153pub fn reqwest_blocking_request(
154    builder: ::reqwest::blocking::Request,
155) -> Result<::reqwest::blocking::Request, crate::v1_1_4::ApiError>
156{
157    Ok(builder)
158}