Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Proc macro to create .pyi file from rust implementations #4267

Open
Jgfrausing opened this issue Jun 20, 2024 · 0 comments
Open

Proc macro to create .pyi file from rust implementations #4267

Jgfrausing opened this issue Jun 20, 2024 · 0 comments

Comments

@Jgfrausing
Copy link
Contributor

Link to POC implementation

Motivation

Manually maintaining a .PYI for your PYO3 project sucks

Setup

Unpack

Place pyi-macros in the root of your PYO3 project.

Modify the path

Replace "INSERT_MODULE_NAME_HERE" with the name of your PYO3 module.

Dependencies

Make a dependency to the pyi_macros and add an optional feature:

[dependencies]
pyo3 = { version = "0.20.3", features = ["chrono"] }
pyi_macros = { path = "../pyi-macros",  optional = true }

[features]
pyi = ["pyi_macros"]

Usage

#[cfg_attr(feature = "pyi", pyi_macros::pyi)]
#[pyclass]
pub enum MyEnum {
    /// Some doc string
    High,
    /// Some doc string
    Low
}


#[cfg_attr(feature = "pyi", pyi_macros::pyi)]
#[pyclass]
pub struct MyClass {
    /// Some doc string
    pub value: i64
}

#[cfg_attr(feature = "pyi", pyi_macros::pyi_impl)]
#[pyclass]
pub struct MyClass {
    /// Some doc string
    pub value: i64
}

Create the PYI interface file:

> cargo build --features pyi

Know limitations

  1. Not all types are implemented yet
  2. This does not work well with --all-features flags for other cargo commands
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant