jinxapi_github/v1_1_4/request/
repos_download_zipball_archive.rs

1//! Download a repository archive (zip)
2//! 
3//! Gets a redirect URL to download a zip archive for a repository. If you omit `:ref`, the repository’s default branch (usually
4//! `master`) will be used. Please make sure your HTTP framework is configured to follow redirects or you will need to use
5//! the `Location` header to make a second `GET` request.
6//! **Note**: For private repositories, these links are temporary and expire after five minutes.
7//! 
8//! [API method documentation](https://docs.github.com/rest/reference/repos#download-a-repository-archive)
9
10
11fn url_string(
12    base_url: &str,
13    p_owner: &str,
14    p_repo: &str,
15    p_ref: &str,
16) -> Result<String, crate::v1_1_4::ApiError> {
17    let trimmed = if base_url.is_empty() {
18        "https://api.github.com"
19    } else {
20        base_url.trim_end_matches('/')
21    };
22    let mut url = String::with_capacity(trimmed.len() + 36);
23    url.push_str(trimmed);
24    url.push_str("/repos/");
25    ::querylizer::Simple::extend(&mut url, &p_owner, false, &::querylizer::encode_path)?;
26    url.push('/');
27    ::querylizer::Simple::extend(&mut url, &p_repo, false, &::querylizer::encode_path)?;
28    url.push_str("/zipball/");
29    ::querylizer::Simple::extend(&mut url, &p_ref, false, &::querylizer::encode_path)?;
30    Ok(url)
31}
32
33#[cfg(feature = "hyper")]
34pub fn http_builder(
35    base_url: &str,
36    p_owner: &str,
37    p_repo: &str,
38    p_ref: &str,
39    h_user_agent: &str,
40    h_accept: ::std::option::Option<&str>,
41) -> Result<::http::request::Builder, crate::v1_1_4::ApiError> {
42    let url = url_string(
43        base_url,
44        p_owner,
45        p_repo,
46        p_ref,
47    )?;
48    let mut builder = ::http::request::Request::get(url);
49    builder = builder.header(
50        "User-Agent",
51        &::querylizer::Simple::to_string(&h_user_agent, false, &::querylizer::passthrough)?
52    );
53    if let Some(value) = &h_accept {
54        builder = builder.header(
55            "Accept",
56            &::querylizer::Simple::to_string(value, false, &::querylizer::passthrough)?
57        );
58    }
59    Ok(builder)
60}
61
62#[cfg(feature = "hyper")]
63#[inline]
64pub fn hyper_request(
65    builder: ::http::request::Builder,
66) -> Result<::http::request::Request<::hyper::Body>, crate::v1_1_4::ApiError> {
67    Ok(builder.body(::hyper::Body::empty())?)
68}
69
70#[cfg(feature = "reqwest")]
71pub fn reqwest_builder(
72    base_url: &str,
73    p_owner: &str,
74    p_repo: &str,
75    p_ref: &str,
76    h_user_agent: &str,
77    h_accept: ::std::option::Option<&str>,
78) -> Result<::reqwest::Request, crate::v1_1_4::ApiError> {
79    let url = url_string(
80        base_url,
81        p_owner,
82        p_repo,
83        p_ref,
84    )?;
85    let reqwest_url = ::reqwest::Url::parse(&url)?;
86    let mut request = ::reqwest::Request::new(::reqwest::Method::GET, reqwest_url);
87    let headers = request.headers_mut();
88    headers.append(
89        "User-Agent",
90        ::querylizer::Simple::to_string(&h_user_agent, false, &::querylizer::passthrough)?.try_into()?
91    );
92    if let Some(value) = &h_accept {
93        headers.append(
94            "Accept",
95            ::querylizer::Simple::to_string(value, false, &::querylizer::passthrough)?.try_into()?
96        );
97    }
98    Ok(request)
99}
100
101#[cfg(feature = "reqwest")]
102#[inline(always)]
103pub fn reqwest_request(
104    builder: ::reqwest::Request,
105) -> Result<::reqwest::Request, crate::v1_1_4::ApiError>
106{
107    Ok(builder)
108}
109
110#[cfg(feature = "reqwest-blocking")]
111pub fn reqwest_blocking_builder(
112    base_url: &str,
113    p_owner: &str,
114    p_repo: &str,
115    p_ref: &str,
116    h_user_agent: &str,
117    h_accept: ::std::option::Option<&str>,
118) -> Result<::reqwest::blocking::Request, crate::v1_1_4::ApiError> {
119    let url = url_string(
120        base_url,
121        p_owner,
122        p_repo,
123        p_ref,
124    )?;
125    let reqwest_url = ::reqwest::Url::parse(&url)?;
126    let mut request = ::reqwest::blocking::Request::new(::reqwest::Method::GET, reqwest_url);
127    let headers = request.headers_mut();
128    headers.append(
129        "User-Agent",
130        ::querylizer::Simple::to_string(&h_user_agent, false, &::querylizer::passthrough)?.try_into()?
131    );
132    if let Some(value) = &h_accept {
133        headers.append(
134            "Accept",
135            ::querylizer::Simple::to_string(value, false, &::querylizer::passthrough)?.try_into()?
136        );
137    }
138    Ok(request)
139}
140
141#[cfg(feature = "reqwest-blocking")]
142#[inline(always)]
143pub fn reqwest_blocking_request(
144    builder: ::reqwest::blocking::Request,
145) -> Result<::reqwest::blocking::Request, crate::v1_1_4::ApiError>
146{
147    Ok(builder)
148}