Extend Deserialization Support to Pydantic Models and Dataclasses #23
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR builds on the previous work by extending the serialization and deserialization capabilities to include support for Pydantic models and Python dataclasses. The new commit 1aacb80 introduces functionality that further bridges Python's dynamic data structures with Rust’s type-safe ecosystem.
Overview
Pydantic Support:
Pydantic models are now supported out-of-the-box. The implementation detects when a Python object is a Pydantic model and appropriately serializes its underlying data.
Dataclasses Support:
Similarly, Python dataclasses are now handled seamlessly. The logic checks for dataclass instances and extracts their fields for serialization.
Implementation Details
Type Checking:
The implementation introduces checks to determine if an object is an instance of a Pydantic model or a dataclass. This is performed before falling back to the general Python object handling.
Data Extraction:
Testing
New tests have been added to verify:
Conclusion
This PR significantly enhances the serde-pyobject library by incorporating first-class support for Pydantic models and Python dataclasses. These changes make it easier for developers to work with Python’s modern data modeling tools in a Rust environment, ensuring a smoother and more robust interoperation between the two ecosystems.
Please review the changes and share any feedback. Further improvements and refinements can be addressed in subsequent PRs.