Simple, fast, and space-efficient (de)serialization for simple Python classes
Project description
Miniserial
Miniserial is a Python package for dead-simple, space-efficient serialization and deserialization of simple dataclasses.
There are many great packages for general purpose serialization in the standard library and on PyPI (e.g. json
, marshal
,
pickle
, ujson
, bson
, etc.), but most use serialization formats that can come with significant byte overhead. Sometimes,
project constraints—like the 256-byte-max-packet radio devices that inspired this package—encourage the use of a much more
compact format, something akin to protobuf or the layout of C structs. But libraries in this space typically come with the
overhead of implementing manual serializers, modifying class fields with various wrappers, or using non python data
specifications (e.g. .proto
files).
Miniserial makes compact serialization easy. Simply have your dataclass inherit from the Serialization
mixin, and
serialize
and deserialize
methods will be automatically generated for the class. For example:
from dataclasses import dataclass
from miniserial import Serializable
@dataclass
class Person(Serializable):
name : str
age : int
titles : list[str]
balance: float
p = Person("Bob", 34, ["Mr.", "Dr.", "Professor"], 239847.25)
assert Person.deserialize(p.serialize()) == p
Classes that inherit the Serializable
mixin must be dataclasses composed of fields annotated with simple types.
Postponed annotation evaluation (PEP 563) is not currently supported, so serializable classes must not be
defined in a file with the import: from __future__ import annotations
.
Documentation of supported types and the serialization format is on the way. For now, bool
, int
, float
, str
,
and list
are supported. int
and float
are taken to be 32 bit values. Support for more types, including
int64
, float64
, etc. from numpy
are on the horizon.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file miniserial-0.1.1.tar.gz
.
File metadata
- Download URL: miniserial-0.1.1.tar.gz
- Upload date:
- Size: 5.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.9
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 734f5e31864dcfec7851b4b9f8885b4b2258d82eec305a230c4d61b5d1ce6aa9 |
|
MD5 | 6bbc4f8d40064ef926ef5c648b30a438 |
|
BLAKE2b-256 | 23894dda18d566b40763fcdd96767f8842da388438741abedd04c13be7ae6148 |
File details
Details for the file miniserial-0.1.1-py3-none-any.whl
.
File metadata
- Download URL: miniserial-0.1.1-py3-none-any.whl
- Upload date:
- Size: 4.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.9
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 96b9165f15e978b72fd3df8df9eb106df647dc9eec9328b3223e3001282c696b |
|
MD5 | dd70dffd27dbe53973ff18e6c861ba0d |
|
BLAKE2b-256 | 700224ba89a083ad31e69d17e44c1c651f60f54f3dbc7c13bb6e50b372ef1345 |