Metadata-Version: 2.3
Name: cmodel
Version: 0.5.0
Summary: Model C structs with Pydantic
Keywords: 
Author: Ryan Morshead
Author-email: Ryan Morshead <ryan.morshead@gmail.com>
License: MIT License
         
         Copyright (c)  Ryan Morshead <ryan.morshead@gmail.com>
         
         Permission is hereby granted, free of charge, to any person obtaining a copy of this
         software and associated documentation files (the "Software"), to deal in the Software
         without restriction, including without limitation the rights to use, copy, modify,
         merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
         permit persons to whom the Software is furnished to do so, subject to the following
         conditions:
         
         The above copyright notice and this permission notice shall be included in all copies or
         substantial portions of the Software.
         
         THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
         INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
         PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
         LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
         TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
         OTHER DEALINGS IN THE SOFTWARE.
Classifier: Development Status :: 4 - Beta
Classifier: Programming Language :: Python
Requires-Dist: pydantic>=2,<3
Requires-Python: >=3.12, <4
Project-URL: Source, https://github.com/rmorshea/cmodel
Description-Content-Type: text/markdown

# CModel

[![PyPI - Version](https://img.shields.io/pypi/v/cmodel.svg)](https://pypi.org/project/cmodel)
[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/cmodel.svg)](https://pypi.org/project/cmodel)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

Model C structs with Pydantic

`cmodel` lets you describe C-compatible binary layouts with normal Pydantic models.
You keep Pydantic's validation and nested models, and gain a simple way to pack and
unpack structs from binary buffers.

## Quick start

```python
from io import BytesIO

from cmodel import CModel
from cmodel.types import Int


class Point(CModel):
	x: Int
	y: Int


buf = BytesIO()
Point(x=3, y=7).c_pack(buf)

buf.seek(0)
point = Point.c_unpack(buf)

assert point == Point(x=3, y=7)
assert buf.getvalue() == b"\x03\x00\x00\x00\x07\x00\x00\x00"
```
