mirror of
https://git.proxmox.com/git/rustc
synced 2026-03-27 04:47:30 +00:00
57 lines
1.6 KiB
Rust
57 lines
1.6 KiB
Rust
use std::ffi::CString;
|
|
use std::marker;
|
|
use std::ptr;
|
|
|
|
use crate::raw;
|
|
use crate::util::Binding;
|
|
|
|
/// Options which can be specified to various fetch operations.
|
|
#[derive(Default)]
|
|
pub struct ProxyOptions<'a> {
|
|
url: Option<CString>,
|
|
proxy_kind: raw::git_proxy_t,
|
|
_marker: marker::PhantomData<&'a i32>,
|
|
}
|
|
|
|
impl<'a> ProxyOptions<'a> {
|
|
/// Creates a new set of proxy options ready to be configured.
|
|
pub fn new() -> ProxyOptions<'a> {
|
|
Default::default()
|
|
}
|
|
|
|
/// Try to auto-detect the proxy from the git configuration.
|
|
///
|
|
/// Note that this will override `url` specified before.
|
|
pub fn auto(&mut self) -> &mut Self {
|
|
self.proxy_kind = raw::GIT_PROXY_AUTO;
|
|
self
|
|
}
|
|
|
|
/// Specify the exact URL of the proxy to use.
|
|
///
|
|
/// Note that this will override `auto` specified before.
|
|
pub fn url(&mut self, url: &str) -> &mut Self {
|
|
self.proxy_kind = raw::GIT_PROXY_SPECIFIED;
|
|
self.url = Some(CString::new(url).unwrap());
|
|
self
|
|
}
|
|
}
|
|
|
|
impl<'a> Binding for ProxyOptions<'a> {
|
|
type Raw = raw::git_proxy_options;
|
|
unsafe fn from_raw(_raw: raw::git_proxy_options) -> ProxyOptions<'a> {
|
|
panic!("can't create proxy from raw options")
|
|
}
|
|
|
|
fn raw(&self) -> raw::git_proxy_options {
|
|
raw::git_proxy_options {
|
|
version: raw::GIT_PROXY_OPTIONS_VERSION,
|
|
kind: self.proxy_kind,
|
|
url: self.url.as_ref().map(|s| s.as_ptr()).unwrap_or(ptr::null()),
|
|
credentials: None,
|
|
certificate_check: None,
|
|
payload: ptr::null_mut(),
|
|
}
|
|
}
|
|
}
|