adding classes

This commit is contained in:
Andy Pack 2023-05-06 16:10:51 +01:00
parent bfafbc6e9f
commit fbc5b099d6
Signed by: sarsoo
GPG Key ID: A55BA3536A5E0ED7
3 changed files with 36 additions and 0 deletions

3
README.md Normal file
View File

@ -0,0 +1,3 @@
# Python + Rust Playground
Playing with Pyo3 and Maturin to build Python libraries with Rust

View File

@ -1,5 +1,7 @@
use pyo3::prelude::*;
mod types;
/// Formats the sum of two numbers as string.
#[pyfunction]
fn sum_as_string(a: usize, b: usize) -> PyResult<String> {
@ -17,9 +19,15 @@ fn register_child_module(py: Python<'_>, parent_module: &PyModule) -> PyResult<(
/// the `lib.name` setting in the `Cargo.toml`, else Python will not be able to
/// import the module.
#[pymodule]
#[pyo3(name = "py_rust_playground")] // python package name
fn py_rust_playground(_py: Python, m: &PyModule) -> PyResult<()> {
m.add_function(wrap_pyfunction!(sum_as_string, m)?)?;
m.add_class::<types::Integer>()?;
m.add_class::<types::Number>()?;
m.add_class::<types::HttpResponse>()?;
m.add_class::<types::MyEnum>()?;
register_child_module(_py, m)?;
Ok(())
}

25
src/types.rs Normal file
View File

@ -0,0 +1,25 @@
use pyo3::prelude::*;
#[pyclass]
pub struct Integer {
inner: i32,
}
// A "tuple" struct
#[pyclass]
pub struct Number(i32);
// PyO3 supports custom discriminants in enums
#[pyclass]
pub enum HttpResponse {
Ok = 200,
NotFound = 404,
Teapot = 418,
// ...
}
#[pyclass]
pub enum MyEnum {
Variant,
OtherVariant = 30, // PyO3 supports custom discriminants.
}