use std::ffi::c_void; #[cfg(has_std__ffi__c_char)] use std::ffi::{c_char, c_int}; #[cfg(not(has_std__ffi__c_char))] #[allow(non_camel_case_types)] pub type c_char = i8; #[cfg(not(has_std__ffi__c_char))] #[allow(non_camel_case_types)] pub type c_int = i32; extern crate libz_sys; #[allow(non_camel_case_types)] #[repr(C)] pub struct libgit_config_set { _data: [u8; 0], _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>, } extern "C" { pub fn free(ptr: *mut c_void); pub fn libgit_user_agent() -> *const c_char; pub fn libgit_user_agent_sanitized() -> *const c_char; pub fn libgit_configset_alloc() -> *mut libgit_config_set; pub fn libgit_configset_free(cs: *mut libgit_config_set); pub fn libgit_configset_add_file(cs: *mut libgit_config_set, filename: *const c_char) -> c_int; pub fn libgit_configset_get_int( cs: *mut libgit_config_set, key: *const c_char, int: *mut c_int, ) -> c_int; pub fn libgit_configset_get_string( cs: *mut libgit_config_set, key: *const c_char, dest: *mut *mut c_char, ) -> c_int; } #[cfg(test)] mod tests { use std::ffi::CStr; use super::*; #[test] fn user_agent_starts_with_git() { let c_str = unsafe { CStr::from_ptr(libgit_user_agent()) }; let agent = c_str .to_str() .expect("User agent contains invalid UTF-8 data"); assert!( agent.starts_with("git/"), r#"Expected user agent to start with "git/", got: {}"#, agent ); } #[test] fn sanitized_user_agent_starts_with_git() { let c_str = unsafe { CStr::from_ptr(libgit_user_agent_sanitized()) }; let agent = c_str .to_str() .expect("Sanitized user agent contains invalid UTF-8 data"); assert!( agent.starts_with("git/"), r#"Expected user agent to start with "git/", got: {}"#, agent ); } }