pyo3_pytests/
pyfunctions.rs1use pyo3::prelude::*;
2use pyo3::types::{PyDict, PyTuple};
3
4#[pyfunction(signature = ())]
5fn none() {}
6
7type Any<'py> = Bound<'py, PyAny>;
8type Dict<'py> = Bound<'py, PyDict>;
9type Tuple<'py> = Bound<'py, PyTuple>;
10
11#[pyfunction(signature = (a, b = None, *, c = None))]
12fn simple<'py>(
13 a: Any<'py>,
14 b: Option<Any<'py>>,
15 c: Option<Any<'py>>,
16) -> (Any<'py>, Option<Any<'py>>, Option<Any<'py>>) {
17 (a, b, c)
18}
19
20#[pyfunction(signature = (a, b = None, *args, c = None))]
21fn simple_args<'py>(
22 a: Any<'py>,
23 b: Option<Any<'py>>,
24 args: Tuple<'py>,
25 c: Option<Any<'py>>,
26) -> (Any<'py>, Option<Any<'py>>, Tuple<'py>, Option<Any<'py>>) {
27 (a, b, args, c)
28}
29
30#[pyfunction(signature = (a, b = None, c = None, **kwargs))]
31fn simple_kwargs<'py>(
32 a: Any<'py>,
33 b: Option<Any<'py>>,
34 c: Option<Any<'py>>,
35 kwargs: Option<Dict<'py>>,
36) -> (
37 Any<'py>,
38 Option<Any<'py>>,
39 Option<Any<'py>>,
40 Option<Dict<'py>>,
41) {
42 (a, b, c, kwargs)
43}
44
45#[pyfunction(signature = (a, b = None, *args, c = None, **kwargs))]
46fn simple_args_kwargs<'py>(
47 a: Any<'py>,
48 b: Option<Any<'py>>,
49 args: Tuple<'py>,
50 c: Option<Any<'py>>,
51 kwargs: Option<Dict<'py>>,
52) -> (
53 Any<'py>,
54 Option<Any<'py>>,
55 Tuple<'py>,
56 Option<Any<'py>>,
57 Option<Dict<'py>>,
58) {
59 (a, b, args, c, kwargs)
60}
61
62#[pyfunction(signature = (*args, **kwargs))]
63fn args_kwargs<'py>(
64 args: Tuple<'py>,
65 kwargs: Option<Dict<'py>>,
66) -> (Tuple<'py>, Option<Dict<'py>>) {
67 (args, kwargs)
68}
69
70#[pymodule(gil_used = false)]
71pub fn pyfunctions(m: &Bound<'_, PyModule>) -> PyResult<()> {
72 m.add_function(wrap_pyfunction!(none, m)?)?;
73 m.add_function(wrap_pyfunction!(simple, m)?)?;
74 m.add_function(wrap_pyfunction!(simple_args, m)?)?;
75 m.add_function(wrap_pyfunction!(simple_kwargs, m)?)?;
76 m.add_function(wrap_pyfunction!(simple_args_kwargs, m)?)?;
77 m.add_function(wrap_pyfunction!(args_kwargs, m)?)?;
78 Ok(())
79}