Title: Deserialize dataclass as Rust struct/mapping · Issue #93 · davidhewitt/pythonize · GitHub
Open Graph Title: Deserialize dataclass as Rust struct/mapping · Issue #93 · davidhewitt/pythonize
X Title: Deserialize dataclass as Rust struct/mapping · Issue #93 · davidhewitt/pythonize
Description: Hi, thanks for the great crate! I'm using it to deserialize things that I can't easily wrap with #[derive(FromPyObject)], but that are serde compatible. On the Python side, I'm using dataclasses a lot, and I'd like to convert them to Rus...
Open Graph Description: Hi, thanks for the great crate! I'm using it to deserialize things that I can't easily wrap with #[derive(FromPyObject)], but that are serde compatible. On the Python side, I'm using dataclasses a ...
X Description: Hi, thanks for the great crate! I'm using it to deserialize things that I can't easily wrap with #[derive(FromPyObject)], but that are serde compatible. On the Python side, I'm using da...
Opengraph URL: https://github.com/davidhewitt/pythonize/issues/93
X: @github
Domain: patch-diff.githubusercontent.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Deserialize dataclass as Rust struct/mapping","articleBody":"Hi, thanks for the great crate! I'm using it to deserialize things that I can't easily wrap with `#[derive(FromPyObject)]`, but that are `serde` compatible. On the Python side, I'm using dataclasses a lot, and I'd like to convert them to Rust structs. So I have something like this on the Rust side:\n\n```rust\n#[derive(serde::Deserialize)] // This can't use FromPyObject\nstruct Foo {\n a: i32,\n}\n\n#[pyfunction]\nfn take_foo\u003c's\u003e(py: Python, arg: \u0026Bound\u003c's, PyAny\u003e) {\n pythonize::depythonize::\u003cFoo\u003e(arg).unwrap();\n} \n```\n\nand I'd like to send something like this from the Python side:\n```python\n@dataclasses.dataclass\nclass Foo:\n a: int\n\nffi.take_foo(Foo(a=1))\n```\n\nHowever, currently that ends with an error:\n```\npyo3_runtime.PanicException: called `Result::unwrap()` on an `Err` value: UnexpectedType(\"'Foo' object cannot be converted to 'Mapping'\")\n```\n\nIs there a way to make it work? I can pre-convert the dataclass to a dictionary with `dataclasses.as_dict(Foo(a=1))`, but that seems wasteful. `FromPyObject` is able to read the fields of the object, even if it is not a dictionary, so it seems like `depythonize` could also do that.\n\nThanks for your answer!","author":{"url":"https://github.com/Kobzol","@type":"Person","name":"Kobzol"},"datePublished":"2025-08-28T14:21:44.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":4},"url":"https://github.com/93/pythonize/issues/93"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:de57fff3-d384-4753-3480-a7f4408b1a62 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | 949E:1908DE:AA54D1:E638BE:698F7223 |
| html-safe-nonce | 3ad566d69e684d4f794f18e23489e6da855a901c6424b30a5450176fbb029d0f |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI5NDlFOjE5MDhERTpBQTU0RDE6RTYzOEJFOjY5OEY3MjIzIiwidmlzaXRvcl9pZCI6Ijc2NTQ1ODY0MjQ1MTI2NDAzNSIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | 02beea50d638c8f508c0d8af8120578d96d51c6be832edb7e3be201558d9c1a1 |
| hovercard-subject-tag | issue:3363525959 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/davidhewitt/pythonize/93/issue_layout |
| twitter:image | https://opengraph.githubassets.com/2ff1fd2e932dc39e3347d2bfa2444d422958d646838b0292f4acf304e9a8b05b/davidhewitt/pythonize/issues/93 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/2ff1fd2e932dc39e3347d2bfa2444d422958d646838b0292f4acf304e9a8b05b/davidhewitt/pythonize/issues/93 |
| og:image:alt | Hi, thanks for the great crate! I'm using it to deserialize things that I can't easily wrap with #[derive(FromPyObject)], but that are serde compatible. On the Python side, I'm using dataclasses a ... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | Kobzol |
| hostname | github.com |
| expected-hostname | github.com |
| None | a40913be56b49e6322246e4bcd65ab6ec4b458c6dca6b691d30419da1e5ee35e |
| turbo-cache-control | no-preview |
| go-import | github.com/davidhewitt/pythonize git https://github.com/davidhewitt/pythonize.git |
| octolytics-dimension-user_id | 1939362 |
| octolytics-dimension-user_login | davidhewitt |
| octolytics-dimension-repository_id | 285867319 |
| octolytics-dimension-repository_nwo | davidhewitt/pythonize |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 285867319 |
| octolytics-dimension-repository_network_root_nwo | davidhewitt/pythonize |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | ca6051e0ba2303370981e3d01e2bc1044eb3b429 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width