#![no_std]
#![allow(clippy::upper_case_acronyms)]
#![allow(non_camel_case_types)]
#![allow(non_upper_case_globals)]
#![allow(non_snake_case)]
#![doc(html_root_url = "https://docs.rs/objc-sys/0.2.0-beta.0")]
extern crate std;
#[cfg(doctest)]
#[doc = include_str!("../README.md")]
extern "C" {}
use core::cell::UnsafeCell;
use core::marker::{PhantomData, PhantomPinned};
macro_rules! generate_linking_tests {
{
$(#[$extern_m:meta])*
extern $abi:literal {$(
$(#[$m:meta])*
$v:vis fn $name:ident($($a:ident: $t:ty),* $(,)?) $(-> $r:ty)?;
)+}
} => {
$(#[$extern_m])*
extern $abi {$(
$(#[$m])*
$v fn $name($($a: $t),*) $(-> $r)?;
)+}
$(#[$extern_m])*
#[allow(deprecated)]
#[cfg(test)]
mod test_linkable {
#[allow(unused)]
use super::*;
use std::println;
$(
$(#[$m])*
#[test]
fn $name() {
let f: unsafe extern $abi fn($($t),*) $(-> $r)? = crate::$name;
println!("{:p}", f);
}
)+
}
};
}
macro_rules! extern_c {
{
$(#![$extern_m:meta])*
$(
$(#[$m:meta])*
$v:vis fn $name:ident($($a:ident: $t:ty),* $(,)?) $(-> $r:ty)?;
)+
} => {
generate_linking_tests! {
$(#[$extern_m])*
extern "C" {$(
$(#[$m])*
$v fn $name($($a: $t),*) $(-> $r)?;
)+}
}
};
}
mod class;
mod constants;
mod exception;
mod message;
mod method;
mod object;
mod property;
mod protocol;
mod rc;
mod selector;
mod types;
mod various;
pub use class::*;
pub use constants::*;
pub use exception::*;
pub use message::*;
pub use method::*;
pub use object::*;
pub use property::*;
pub use protocol::*;
pub use rc::*;
pub use selector::*;
pub use types::*;
pub use various::*;
type OpaqueData = UnsafeCell<PhantomData<(*const UnsafeCell<()>, PhantomPinned)>>;
#[cfg(test)]
mod tests {
use super::*;
use std::ffi::CStr;
#[test]
fn smoke() {
let name = CStr::from_bytes_with_nul(b"abc:def:\0").unwrap();
let sel = unsafe { sel_registerName(name.as_ptr()) };
let rtn = unsafe { CStr::from_ptr(sel_getName(sel)) };
assert_eq!(name, rtn);
}
}