Compare commits

..

2 Commits

Author SHA1 Message Date
debf43dff9
adding constructor and get/set 2023-05-06 16:16:48 +01:00
fbc5b099d6
adding classes 2023-05-06 16:10:51 +01:00
3 changed files with 45 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(())
}

34
src/types.rs Normal file
View File

@ -0,0 +1,34 @@
use pyo3::prelude::*;
#[pyclass]
pub struct Integer {
#[pyo3(get, set)]
inner: i32,
}
#[pymethods]
impl Integer {
#[new]
fn new(value: i32) -> Integer {
Integer { inner: value }
}
}
// 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.
}