jinxapi_github/v1_1_4/request/
issues_get.rs

1//! Get an issue
2//! 
3//! The API returns a [`301 Moved Permanently` status](https://docs.github.com/rest/overview/resources-in-the-rest-api#http-redirects-redirects) if the issue was
4//! [transferred](https://docs.github.com/articles/transferring-an-issue-to-another-repository/) to another repository. If
5//! the issue was transferred to or deleted from a repository where the authenticated user lacks read access, the API
6//! returns a `404 Not Found` status. If the issue was deleted from a repository where the authenticated user has read
7//! access, the API returns a `410 Gone` status. To receive webhook events for transferred and deleted issues, subscribe
8//! to the [`issues`](https://docs.github.com/webhooks/event-payloads/#issues) webhook.
9//! 
10//! **Note**: GitHub's REST API v3 considers every pull request an issue, but not every issue is a pull request. For this
11//! reason, "Issues" endpoints may return both issues and pull requests in the response. You can identify pull requests by
12//! the `pull_request` key. Be aware that the `id` of a pull request returned from "Issues" endpoints will be an _issue id_. To find out the pull
13//! request id, use the "[List pull requests](https://docs.github.com/rest/reference/pulls#list-pull-requests)" endpoint.
14//! 
15//! [API method documentation](https://docs.github.com/rest/reference/issues#get-an-issue)
16
17
18fn url_string(
19    base_url: &str,
20    p_owner: &str,
21    p_repo: &str,
22    p_issue_number: 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() + 35);
30    url.push_str(trimmed);
31    url.push_str("/repos/");
32    ::querylizer::Simple::extend(&mut url, &p_owner, false, &::querylizer::encode_path)?;
33    url.push('/');
34    ::querylizer::Simple::extend(&mut url, &p_repo, false, &::querylizer::encode_path)?;
35    url.push_str("/issues/");
36    ::querylizer::Simple::extend(&mut url, &p_issue_number, false, &::querylizer::encode_path)?;
37    Ok(url)
38}
39
40#[cfg(feature = "hyper")]
41pub fn http_builder(
42    base_url: &str,
43    p_owner: &str,
44    p_repo: &str,
45    p_issue_number: i64,
46    h_user_agent: &str,
47    h_accept: ::std::option::Option<&str>,
48) -> Result<::http::request::Builder, crate::v1_1_4::ApiError> {
49    let url = url_string(
50        base_url,
51        p_owner,
52        p_repo,
53        p_issue_number,
54    )?;
55    let mut builder = ::http::request::Request::get(url);
56    builder = builder.header(
57        "User-Agent",
58        &::querylizer::Simple::to_string(&h_user_agent, false, &::querylizer::passthrough)?
59    );
60    if let Some(value) = &h_accept {
61        builder = builder.header(
62            "Accept",
63            &::querylizer::Simple::to_string(value, false, &::querylizer::passthrough)?
64        );
65    }
66    Ok(builder)
67}
68
69#[cfg(feature = "hyper")]
70#[inline]
71pub fn hyper_request(
72    builder: ::http::request::Builder,
73) -> Result<::http::request::Request<::hyper::Body>, crate::v1_1_4::ApiError> {
74    Ok(builder.body(::hyper::Body::empty())?)
75}
76
77#[cfg(feature = "reqwest")]
78pub fn reqwest_builder(
79    base_url: &str,
80    p_owner: &str,
81    p_repo: &str,
82    p_issue_number: i64,
83    h_user_agent: &str,
84    h_accept: ::std::option::Option<&str>,
85) -> Result<::reqwest::Request, crate::v1_1_4::ApiError> {
86    let url = url_string(
87        base_url,
88        p_owner,
89        p_repo,
90        p_issue_number,
91    )?;
92    let reqwest_url = ::reqwest::Url::parse(&url)?;
93    let mut request = ::reqwest::Request::new(::reqwest::Method::GET, reqwest_url);
94    let headers = request.headers_mut();
95    headers.append(
96        "User-Agent",
97        ::querylizer::Simple::to_string(&h_user_agent, false, &::querylizer::passthrough)?.try_into()?
98    );
99    if let Some(value) = &h_accept {
100        headers.append(
101            "Accept",
102            ::querylizer::Simple::to_string(value, false, &::querylizer::passthrough)?.try_into()?
103        );
104    }
105    Ok(request)
106}
107
108#[cfg(feature = "reqwest")]
109#[inline(always)]
110pub fn reqwest_request(
111    builder: ::reqwest::Request,
112) -> Result<::reqwest::Request, crate::v1_1_4::ApiError>
113{
114    Ok(builder)
115}
116
117#[cfg(feature = "reqwest-blocking")]
118pub fn reqwest_blocking_builder(
119    base_url: &str,
120    p_owner: &str,
121    p_repo: &str,
122    p_issue_number: i64,
123    h_user_agent: &str,
124    h_accept: ::std::option::Option<&str>,
125) -> Result<::reqwest::blocking::Request, crate::v1_1_4::ApiError> {
126    let url = url_string(
127        base_url,
128        p_owner,
129        p_repo,
130        p_issue_number,
131    )?;
132    let reqwest_url = ::reqwest::Url::parse(&url)?;
133    let mut request = ::reqwest::blocking::Request::new(::reqwest::Method::GET, reqwest_url);
134    let headers = request.headers_mut();
135    headers.append(
136        "User-Agent",
137        ::querylizer::Simple::to_string(&h_user_agent, false, &::querylizer::passthrough)?.try_into()?
138    );
139    if let Some(value) = &h_accept {
140        headers.append(
141            "Accept",
142            ::querylizer::Simple::to_string(value, false, &::querylizer::passthrough)?.try_into()?
143        );
144    }
145    Ok(request)
146}
147
148#[cfg(feature = "reqwest-blocking")]
149#[inline(always)]
150pub fn reqwest_blocking_request(
151    builder: ::reqwest::blocking::Request,
152) -> Result<::reqwest::blocking::Request, crate::v1_1_4::ApiError>
153{
154    Ok(builder)
155}