jinxapi_github/v1_1_4/request/
search_repos.rs

1//! Search repositories
2//! 
3//! Find repositories via various criteria. This method returns up to 100 results [per page](https://docs.github.com/rest/overview/resources-in-the-rest-api#pagination).
4//! 
5//! When searching for repositories, you can get text match metadata for the **name** and **description** fields 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 popular Tetris repositories written in assembly code, your query might look like this:
8//! 
9//! `q=tetris+language:assembly&sort=stars&order=desc`
10//! 
11//! This query searches for repositories with the word `tetris` in the name, the description, or the README. The results are limited to repositories where the primary language is assembly. The results are sorted by stars in descending order, so that the most popular repositories appear first in the search results.
12//! 
13//! [API method documentation](https://docs.github.com/rest/reference/search#search-repositories)
14
15
16fn url_string(
17    base_url: &str,
18    q_q: &str,
19    q_sort: ::std::option::Option<&str>,
20    q_order: ::std::option::Option<&str>,
21    q_per_page: ::std::option::Option<i64>,
22    q_page: ::std::option::Option<i64>,
23) -> Result<String, crate::v1_1_4::ApiError> {
24    let trimmed = if base_url.is_empty() {
25        "https://api.github.com"
26    } else {
27        base_url.trim_end_matches('/')
28    };
29    let mut url = String::with_capacity(trimmed.len() + 40);
30    url.push_str(trimmed);
31    url.push_str("/search/repositories");
32    url.push('?');
33    ::querylizer::Form::extend(&mut url, "q", &q_q, false, &::querylizer::encode_query)?;
34    if let Some(value) = &q_sort {
35        url.push('&');
36        ::querylizer::Form::extend(&mut url, "sort", value, false, &::querylizer::encode_query)?;
37    }
38    if let Some(value) = &q_order {
39        url.push('&');
40        ::querylizer::Form::extend(&mut url, "order", value, false, &::querylizer::encode_query)?;
41    }
42    if let Some(value) = &q_per_page {
43        url.push('&');
44        ::querylizer::Form::extend(&mut url, "per_page", value, false, &::querylizer::encode_query)?;
45    }
46    if let Some(value) = &q_page {
47        url.push('&');
48        ::querylizer::Form::extend(&mut url, "page", value, false, &::querylizer::encode_query)?;
49    }
50    Ok(url)
51}
52
53#[cfg(feature = "hyper")]
54#[allow(clippy::too_many_arguments)]
55pub fn http_builder(
56    base_url: &str,
57    q_q: &str,
58    q_sort: ::std::option::Option<&str>,
59    q_order: ::std::option::Option<&str>,
60    q_per_page: ::std::option::Option<i64>,
61    q_page: ::std::option::Option<i64>,
62    h_user_agent: &str,
63    h_accept: ::std::option::Option<&str>,
64) -> Result<::http::request::Builder, crate::v1_1_4::ApiError> {
65    let url = url_string(
66        base_url,
67        q_q,
68        q_sort,
69        q_order,
70        q_per_page,
71        q_page,
72    )?;
73    let mut builder = ::http::request::Request::get(url);
74    builder = builder.header(
75        "User-Agent",
76        &::querylizer::Simple::to_string(&h_user_agent, false, &::querylizer::passthrough)?
77    );
78    if let Some(value) = &h_accept {
79        builder = builder.header(
80            "Accept",
81            &::querylizer::Simple::to_string(value, false, &::querylizer::passthrough)?
82        );
83    }
84    Ok(builder)
85}
86
87#[cfg(feature = "hyper")]
88#[inline]
89pub fn hyper_request(
90    builder: ::http::request::Builder,
91) -> Result<::http::request::Request<::hyper::Body>, crate::v1_1_4::ApiError> {
92    Ok(builder.body(::hyper::Body::empty())?)
93}
94
95#[cfg(feature = "reqwest")]
96#[allow(clippy::too_many_arguments)]
97pub fn reqwest_builder(
98    base_url: &str,
99    q_q: &str,
100    q_sort: ::std::option::Option<&str>,
101    q_order: ::std::option::Option<&str>,
102    q_per_page: ::std::option::Option<i64>,
103    q_page: ::std::option::Option<i64>,
104    h_user_agent: &str,
105    h_accept: ::std::option::Option<&str>,
106) -> Result<::reqwest::Request, crate::v1_1_4::ApiError> {
107    let url = url_string(
108        base_url,
109        q_q,
110        q_sort,
111        q_order,
112        q_per_page,
113        q_page,
114    )?;
115    let reqwest_url = ::reqwest::Url::parse(&url)?;
116    let mut request = ::reqwest::Request::new(::reqwest::Method::GET, reqwest_url);
117    let headers = request.headers_mut();
118    headers.append(
119        "User-Agent",
120        ::querylizer::Simple::to_string(&h_user_agent, false, &::querylizer::passthrough)?.try_into()?
121    );
122    if let Some(value) = &h_accept {
123        headers.append(
124            "Accept",
125            ::querylizer::Simple::to_string(value, false, &::querylizer::passthrough)?.try_into()?
126        );
127    }
128    Ok(request)
129}
130
131#[cfg(feature = "reqwest")]
132#[inline(always)]
133pub fn reqwest_request(
134    builder: ::reqwest::Request,
135) -> Result<::reqwest::Request, crate::v1_1_4::ApiError>
136{
137    Ok(builder)
138}
139
140#[cfg(feature = "reqwest-blocking")]
141#[allow(clippy::too_many_arguments)]
142pub fn reqwest_blocking_builder(
143    base_url: &str,
144    q_q: &str,
145    q_sort: ::std::option::Option<&str>,
146    q_order: ::std::option::Option<&str>,
147    q_per_page: ::std::option::Option<i64>,
148    q_page: ::std::option::Option<i64>,
149    h_user_agent: &str,
150    h_accept: ::std::option::Option<&str>,
151) -> Result<::reqwest::blocking::Request, crate::v1_1_4::ApiError> {
152    let url = url_string(
153        base_url,
154        q_q,
155        q_sort,
156        q_order,
157        q_per_page,
158        q_page,
159    )?;
160    let reqwest_url = ::reqwest::Url::parse(&url)?;
161    let mut request = ::reqwest::blocking::Request::new(::reqwest::Method::GET, reqwest_url);
162    let headers = request.headers_mut();
163    headers.append(
164        "User-Agent",
165        ::querylizer::Simple::to_string(&h_user_agent, false, &::querylizer::passthrough)?.try_into()?
166    );
167    if let Some(value) = &h_accept {
168        headers.append(
169            "Accept",
170            ::querylizer::Simple::to_string(value, false, &::querylizer::passthrough)?.try_into()?
171        );
172    }
173    Ok(request)
174}
175
176#[cfg(feature = "reqwest-blocking")]
177#[inline(always)]
178pub fn reqwest_blocking_request(
179    builder: ::reqwest::blocking::Request,
180) -> Result<::reqwest::blocking::Request, crate::v1_1_4::ApiError>
181{
182    Ok(builder)
183}