chore: initial draft of proc macros

This commit is contained in:
2026-07-08 17:30:52 -04:00
parent 8e43ff75a5
commit c637ad2d76
8 changed files with 71 additions and 6 deletions

29
Cargo.lock generated
View File

@@ -1634,9 +1634,9 @@ dependencies = [
[[package]]
name = "proc-macro2"
version = "1.0.103"
version = "1.0.106"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8"
checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934"
dependencies = [
"unicode-ident",
]
@@ -1736,9 +1736,26 @@ version = "0.1.0"
dependencies = [
"derive_more",
"pyo3",
"python-utils-macros",
"snafu",
]
[[package]]
name = "python-utils-macros"
version = "0.1.0"
dependencies = [
"python-utils-macros-impl",
]
[[package]]
name = "python-utils-macros-impl"
version = "0.1.0"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "quick_cache"
version = "0.6.18"
@@ -1751,9 +1768,9 @@ dependencies = [
[[package]]
name = "quote"
version = "1.0.42"
version = "1.0.46"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f"
checksum = "dfbc457d0c7a0759a614551b11a6409e5951f6c7537be1f1b7682b9ae9230368"
dependencies = [
"proc-macro2",
]
@@ -2198,9 +2215,9 @@ dependencies = [
[[package]]
name = "syn"
version = "2.0.111"
version = "2.0.118"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87"
checksum = "1b9ae57f904213ebb649ce6895b8a66c66f0203b9319718f69a5612a065b1422"
dependencies = [
"proc-macro2",
"quote",

View File

@@ -8,6 +8,8 @@ members = [
"persisted",
"protocol",
"python-utils",
"python-utils-macros",
"python-utils-macros-impl",
]
resolver = "2"

View File

@@ -0,0 +1,9 @@
[package]
name = "python-utils-macros-impl"
version = "0.1.0"
edition = "2024"
[dependencies]
proc-macro2 = "1.0.106"
quote = "1.0.46"
syn = "2.0.118"

View File

@@ -0,0 +1,17 @@
use proc_macro2::TokenStream;
use quote::quote;
use syn::{DeriveInput, parse_macro_input};
pub fn py_from_str(input: TokenStream) -> TokenStream {
let derive_input: DeriveInput = parse_macro_input!(input);
let (impl_generics, ty_generics, where_clause) = generics.split_for_impl();
let expanded = quote! {
impl #impl_generics MyTrait for #name #ty_generics #where_clause {
// ...
}
};
expanded
}

View File

@@ -0,0 +1,11 @@
[package]
name = "python-utils-macros"
version = "0.1.0"
edition = "2024"
license.workspace = true
[lib]
proc-macro = true
[dependencies]
python-utils-macros-impl = { path = "../python-utils-macros-impl" }

View File

@@ -0,0 +1,6 @@
use proc_macro::proc_macro_derive;
#[proc_macro_derive(PyFromStr)]
pub fn py_from_str(input: TokenStream) -> TokenStream {
python_utils_macros_impl::py_from_str(input.into()).into()
}

View File

@@ -7,4 +7,5 @@ license = { workspace = true }
[dependencies]
derive_more = { workspace = true }
pyo3 = { workspace = true }
python-utils-macros = { path = "../python-utils-macros" }
snafu = { workspace = true }

View File

@@ -7,6 +7,8 @@ use pyo3::{
};
use snafu::{ResultExt, Snafu};
pub use python_utils_macros::PyFromStr;
pub mod none;
pub use none::IsNone;