blob: b19ba3a5272d3da28be41d6c40e080f09975d259 [file] [log] [blame]
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(),
}
}
}