jinxapi_github/v1_1_4/request/
search_issues_and_pull_requests.rs

1//! Search issues and pull requests
2//! 
3//! Find issues by state and keyword. 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 issues, you can get text match metadata for the issue **title**, issue **body**, and issue **comment body** fields when you pass the `text-match` media type. For more details about how to receive highlighted
6//! search results, see [Text match metadata](https://docs.github.com/rest/reference/search#text-match-metadata).
7//! 
8//! For example, if you want to find the oldest unresolved Python bugs on Windows. Your query might look something like this.
9//! 
10//! `q=windows+label:bug+language:python+state:open&sort=created&order=asc`
11//! 
12//! This query searches for the keyword `windows`, within any open issue that is labeled as `bug`. The search runs across repositories whose primary language is Python. The results are sorted by creation date in ascending order, which means the oldest issues appear first in the search results.
13//! 
14//! **Note:** For [user-to-server](https://docs.github.com/developers/apps/identifying-and-authorizing-users-for-github-apps#user-to-server-requests) GitHub App requests, you can't retrieve a combination of issues and pull requests in a single query. Requests that don't include the `is:issue` or `is:pull-request` qualifier will receive an HTTP `422 Unprocessable Entity` response. To get results for both issues and pull requests, you must send separate queries for issues and pull requests. For more information about the `is` qualifier, see "[Searching only issues or pull requests](https://docs.github.com/github/searching-for-information-on-github/searching-issues-and-pull-requests#search-only-issues-or-pull-requests)."
15//! 
16//! [API method documentation](https://docs.github.com/rest/reference/search#search-issues-and-pull-requests)
17
18
19fn url_string(
20    base_url: &str,
21    q_q: &str,
22    q_sort: ::std::option::Option<&str>,
23    q_order: ::std::option::Option<&str>,
24    q_per_page: ::std::option::Option<i64>,
25    q_page: ::std::option::Option<i64>,
26) -> Result<String, crate::v1_1_4::ApiError> {
27    let trimmed = if base_url.is_empty() {
28        "https://api.github.com"
29    } else {
30        base_url.trim_end_matches('/')
31    };
32    let mut url = String::with_capacity(trimmed.len() + 34);
33    url.push_str(trimmed);
34    url.push_str("/search/issues");
35    url.push('?');
36    ::querylizer::Form::extend(&mut url, "q", &q_q, false, &::querylizer::encode_query)?;
37    if let Some(value) = &q_sort {
38        url.push('&');
39        ::querylizer::Form::extend(&mut url, "sort", value, false, &::querylizer::encode_query)?;
40    }
41    if let Some(value) = &q_order {
42        url.push('&');
43        ::querylizer::Form::extend(&mut url, "order", value, false, &::querylizer::encode_query)?;
44    }
45    if let Some(value) = &q_per_page {
46        url.push('&');
47        ::querylizer::Form::extend(&mut url, "per_page", value, false, &::querylizer::encode_query)?;
48    }
49    if let Some(value) = &q_page {
50        url.push('&');
51        ::querylizer::Form::extend(&mut url, "page", value, false, &::querylizer::encode_query)?;
52    }
53    Ok(url)
54}
55
56#[cfg(feature = "hyper")]
57#[allow(clippy::too_many_arguments)]
58pub fn http_builder(
59    base_url: &str,
60    q_q: &str,
61    q_sort: ::std::option::Option<&str>,
62    q_order: ::std::option::Option<&str>,
63    q_per_page: ::std::option::Option<i64>,
64    q_page: ::std::option::Option<i64>,
65    h_user_agent: &str,
66    h_accept: ::std::option::Option<&str>,
67) -> Result<::http::request::Builder, crate::v1_1_4::ApiError> {
68    let url = url_string(
69        base_url,
70        q_q,
71        q_sort,
72        q_order,
73        q_per_page,
74        q_page,
75    )?;
76    let mut builder = ::http::request::Request::get(url);
77    builder = builder.header(
78        "User-Agent",
79        &::querylizer::Simple::to_string(&h_user_agent, false, &::querylizer::passthrough)?
80    );
81    if let Some(value) = &h_accept {
82        builder = builder.header(
83            "Accept",
84            &::querylizer::Simple::to_string(value, false, &::querylizer::passthrough)?
85        );
86    }
87    Ok(builder)
88}
89
90#[cfg(feature = "hyper")]
91#[inline]
92pub fn hyper_request(
93    builder: ::http::request::Builder,
94) -> Result<::http::request::Request<::hyper::Body>, crate::v1_1_4::ApiError> {
95    Ok(builder.body(::hyper::Body::empty())?)
96}
97
98#[cfg(feature = "reqwest")]
99#[allow(clippy::too_many_arguments)]
100pub fn reqwest_builder(
101    base_url: &str,
102    q_q: &str,
103    q_sort: ::std::option::Option<&str>,
104    q_order: ::std::option::Option<&str>,
105    q_per_page: ::std::option::Option<i64>,
106    q_page: ::std::option::Option<i64>,
107    h_user_agent: &str,
108    h_accept: ::std::option::Option<&str>,
109) -> Result<::reqwest::Request, crate::v1_1_4::ApiError> {
110    let url = url_string(
111        base_url,
112        q_q,
113        q_sort,
114        q_order,
115        q_per_page,
116        q_page,
117    )?;
118    let reqwest_url = ::reqwest::Url::parse(&url)?;
119    let mut request = ::reqwest::Request::new(::reqwest::Method::GET, reqwest_url);
120    let headers = request.headers_mut();
121    headers.append(
122        "User-Agent",
123        ::querylizer::Simple::to_string(&h_user_agent, false, &::querylizer::passthrough)?.try_into()?
124    );
125    if let Some(value) = &h_accept {
126        headers.append(
127            "Accept",
128            ::querylizer::Simple::to_string(value, false, &::querylizer::passthrough)?.try_into()?
129        );
130    }
131    Ok(request)
132}
133
134#[cfg(feature = "reqwest")]
135#[inline(always)]
136pub fn reqwest_request(
137    builder: ::reqwest::Request,
138) -> Result<::reqwest::Request, crate::v1_1_4::ApiError>
139{
140    Ok(builder)
141}
142
143#[cfg(feature = "reqwest-blocking")]
144#[allow(clippy::too_many_arguments)]
145pub fn reqwest_blocking_builder(
146    base_url: &str,
147    q_q: &str,
148    q_sort: ::std::option::Option<&str>,
149    q_order: ::std::option::Option<&str>,
150    q_per_page: ::std::option::Option<i64>,
151    q_page: ::std::option::Option<i64>,
152    h_user_agent: &str,
153    h_accept: ::std::option::Option<&str>,
154) -> Result<::reqwest::blocking::Request, crate::v1_1_4::ApiError> {
155    let url = url_string(
156        base_url,
157        q_q,
158        q_sort,
159        q_order,
160        q_per_page,
161        q_page,
162    )?;
163    let reqwest_url = ::reqwest::Url::parse(&url)?;
164    let mut request = ::reqwest::blocking::Request::new(::reqwest::Method::GET, reqwest_url);
165    let headers = request.headers_mut();
166    headers.append(
167        "User-Agent",
168        ::querylizer::Simple::to_string(&h_user_agent, false, &::querylizer::passthrough)?.try_into()?
169    );
170    if let Some(value) = &h_accept {
171        headers.append(
172            "Accept",
173            ::querylizer::Simple::to_string(value, false, &::querylizer::passthrough)?.try_into()?
174        );
175    }
176    Ok(request)
177}
178
179#[cfg(feature = "reqwest-blocking")]
180#[inline(always)]
181pub fn reqwest_blocking_request(
182    builder: ::reqwest::blocking::Request,
183) -> Result<::reqwest::blocking::Request, crate::v1_1_4::ApiError>
184{
185    Ok(builder)
186}