1use std::ffi::CString;
2use std::marker;
3use std::ptr;
4
5use crate::raw;
6use crate::util::Binding;
7
8#[derive(Default)]
10pub struct ProxyOptions<'a> {
11    url: Option<CString>,
12    proxy_kind: raw::git_proxy_t,
13    _marker: marker::PhantomData<&'a i32>,
14}
15
16impl<'a> ProxyOptions<'a> {
17    pub fn new() -> ProxyOptions<'a> {
19        Default::default()
20    }
21
22    pub fn auto(&mut self) -> &mut Self {
26        self.proxy_kind = raw::GIT_PROXY_AUTO;
27        self
28    }
29
30    pub fn url(&mut self, url: &str) -> &mut Self {
34        self.proxy_kind = raw::GIT_PROXY_SPECIFIED;
35        self.url = Some(CString::new(url).unwrap());
36        self
37    }
38}
39
40impl<'a> Binding for ProxyOptions<'a> {
41    type Raw = raw::git_proxy_options;
42    unsafe fn from_raw(_raw: raw::git_proxy_options) -> ProxyOptions<'a> {
43        panic!("can't create proxy from raw options")
44    }
45
46    fn raw(&self) -> raw::git_proxy_options {
47        raw::git_proxy_options {
48            version: raw::GIT_PROXY_OPTIONS_VERSION,
49            kind: self.proxy_kind,
50            url: self.url.as_ref().map(|s| s.as_ptr()).unwrap_or(ptr::null()),
51            credentials: None,
52            certificate_check: None,
53            payload: ptr::null_mut(),
54        }
55    }
56}