implement `PyBoolMethods`

This commit is contained in:
David Hewitt 2023-12-14 18:01:23 +00:00
parent 97cf9b834c
commit d7adc74ba5
3 changed files with 23 additions and 2 deletions

View File

@ -26,5 +26,6 @@ pub use crate::wrap_pyfunction;
// Expected to become public API in 0.21
// pub(crate) use crate::instance::Py2; // Will be stabilized with a different name
// pub(crate) use crate::types::any::PyAnyMethods;
// pub(crate) use crate::types::boolobject::PyBoolMethods;
// pub(crate) use crate::types::float::PyFloatMethods;
// pub(crate) use crate::types::sequence::PySequenceMethods;

View File

@ -1,6 +1,8 @@
#[cfg(feature = "experimental-inspect")]
use crate::inspect::types::TypeInfo;
use crate::{ffi, FromPyObject, IntoPy, PyAny, PyObject, PyResult, Python, ToPyObject};
use crate::{
ffi, instance::Py2, FromPyObject, IntoPy, PyAny, PyObject, PyResult, Python, ToPyObject,
};
/// Represents a Python `bool`.
#[repr(transparent)]
@ -18,6 +20,24 @@ impl PyBool {
/// Gets whether this boolean is `true`.
#[inline]
pub fn is_true(&self) -> bool {
Py2::borrowed_from_gil_ref(&self).is_true()
}
}
/// Implementation of functionality for [`PyBool`].
///
/// These methods are defined for the `Py2<'py, PyBool>` smart pointer, so to use method call
/// syntax these methods are separated into a trait, because stable Rust does not yet support
/// `arbitrary_self_types`.
#[doc(alias = "PyBool")]
pub trait PyBoolMethods<'py> {
/// Gets whether this boolean is `true`.
fn is_true(&self) -> bool;
}
impl<'py> PyBoolMethods<'py> for Py2<'py, PyBool> {
#[inline]
fn is_true(&self) -> bool {
self.as_ptr() == unsafe { crate::ffi::Py_True() }
}
}

View File

@ -272,7 +272,7 @@ macro_rules! pyobject_native_type {
}
pub(crate) mod any;
mod boolobject;
pub(crate) mod boolobject;
mod bytearray;
mod bytes;
mod capsule;