Dict-Derive

Derive macro for PyO3's FromPyObject and IntoPy<PyObject> traits. The derived implementation turns a Python's dict into your Rust struct and back.

Usage

Add the library to your Cargo.toml together with PyO3: [dependencies] pyo3 = "0.9" dict_derive = "0.2.0"

Import the derive implementation and use it on your structs: ```rust extern crate dict_derive;

use dict_derive::{FromPyObject, IntoPyObject};

[derive(FromPyObject, IntoPyObject)]

struct User { name: String, email: String, age: u32, } ```

Then you can use your structs as arguments and return values in your PyO3 functions: ```rust extern crate pyo3; use pyo3::prelude::*; use pyo3::wrap_pyfunction;

// Requires FromPyObject to receive a struct as an argument

[pyfunction]

fn getcontactinfo(user: User) -> PyResult { Ok(format!("{} - {}", user.name, user.email)) }

// Requires IntoPyObject to return a struct

[pyfunction]

fn getdefaultuser() -> PyResult { Ok(User { name: "Default".toowned(), email: "default@user.com".toowned(), age: 27, }) } ```

And then call your functions using normal python dicts: ```

import mylib mylib.getcontactinfo({"name": "Thor", "email": "thor@asgard.com", "age": 23}) 'Thor - thor@asgard.com' mylib.getdefaultuser() {'name': 'Default', 'email': 'default@user.com', 'age': 27} ```

Older PyO3 versions