Skip to main content

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

miniserial-0.1.1.tar.gz (5.0 kB view details)

Uploaded Source

Built Distribution

miniserial-0.1.1-py3-none-any.whl (4.6 kB view details)

Uploaded Python 3

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

Hashes for miniserial-0.1.1.tar.gz
Algorithm Hash digest
SHA256 734f5e31864dcfec7851b4b9f8885b4b2258d82eec305a230c4d61b5d1ce6aa9
MD5 6bbc4f8d40064ef926ef5c648b30a438
BLAKE2b-256 23894dda18d566b40763fcdd96767f8842da388438741abedd04c13be7ae6148

See more details on using hashes here.

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

Hashes for miniserial-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 96b9165f15e978b72fd3df8df9eb106df647dc9eec9328b3223e3001282c696b
MD5 dd70dffd27dbe53973ff18e6c861ba0d
BLAKE2b-256 700224ba89a083ad31e69d17e44c1c651f60f54f3dbc7c13bb6e50b372ef1345

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page