mirror of
https://github.com/google/bumble.git
synced 2026-05-05 03:28:02 +00:00
Rust tools for working with Realtek firmware
Further adventures in porting tools to Rust to flesh out the supported API. These tools didn't feel like `example`s, so I made a top level `bumble` CLI tool that hosts them all as subcommands. I also moved the usb probe not-really-an-`example` into it as well. I'm open to suggestions on how best to organize the subcommands to make them intuitive to explore with `--help`, and how to leave room for other future tools. I also adopted the per-OS project data dir for a default firmware location so that users can download once and then use those .bin files from anywhere without having to sprinkle .bin files in project directories or reaching inside the python package dir hierarchy.
This commit is contained in:
@@ -31,14 +31,17 @@ pub use pyo3_asyncio;
|
||||
pub mod assigned_numbers;
|
||||
pub mod core;
|
||||
pub mod device;
|
||||
|
||||
pub mod drivers;
|
||||
pub mod gatt_client;
|
||||
pub mod hci;
|
||||
pub mod host;
|
||||
pub mod logging;
|
||||
pub mod profile;
|
||||
pub mod transport;
|
||||
|
||||
/// Convenience extensions to [PyObject]
|
||||
pub trait PyObjectExt {
|
||||
pub trait PyObjectExt: Sized {
|
||||
/// Get a GIL-bound reference
|
||||
fn gil_ref<'py>(&'py self, py: Python<'py>) -> &'py PyAny;
|
||||
|
||||
@@ -49,6 +52,17 @@ pub trait PyObjectExt {
|
||||
{
|
||||
Python::with_gil(|py| self.gil_ref(py).extract::<T>())
|
||||
}
|
||||
|
||||
/// If the Python object is a Python `None`, return a Rust `None`, otherwise `Some` with the mapped type
|
||||
fn into_option<T>(self, map_obj: impl Fn(Self) -> T) -> Option<T> {
|
||||
Python::with_gil(|py| {
|
||||
if self.gil_ref(py).is_none() {
|
||||
None
|
||||
} else {
|
||||
Some(map_obj(self))
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
impl PyObjectExt for PyObject {
|
||||
|
||||
Reference in New Issue
Block a user