pyo3/src/internal_tricks.rs

39 lines
1 KiB
Rust
Raw Normal View History

use std::marker::PhantomData;
use std::rc::Rc;
/// A marker type that makes the type !Send.
/// Temporal hack until https://github.com/rust-lang/rust/issues/13231 is resolved.
pub(crate) type Unsendable = PhantomData<Rc<()>>;
2019-12-08 08:18:25 +00:00
pub struct PrivateMarker;
macro_rules! private_decl {
() => {
/// This trait is private to implement; this method exists to make it
/// impossible to implement outside the crate.
fn __private__(&self) -> crate::internal_tricks::PrivateMarker;
};
2019-12-08 08:18:25 +00:00
}
macro_rules! private_impl {
() => {
#[doc(hidden)]
fn __private__(&self) -> crate::internal_tricks::PrivateMarker {
crate::internal_tricks::PrivateMarker
}
};
2019-12-08 08:18:25 +00:00
}
macro_rules! pyo3_exception {
2020-05-24 12:38:27 +00:00
($doc: expr, $name: ident, $base: ty) => {
#[doc = $doc]
#[repr(transparent)]
#[allow(non_camel_case_types)]
pub struct $name($crate::PyAny);
$crate::impl_exception_boilerplate!($name);
2020-05-24 12:38:27 +00:00
$crate::create_exception_type_object!(pyo3_runtime, $name, $base);
};
}