A module used to define python objects that can be converted to (and from) bytes.


Keywords
deserialization, python, serde, serialization, structured-data
License
AGPL-3.0
Install
pip install hydration==4.0.0

Documentation

Hydration

Tests

This software has been designed for you, with much joy, by Michael Shustin


What is Hydration?

Hydration is a library used to define python objects that can be converted to (and from) bytes.

Installation

pip install hydration

Introduction

This guide assumes you are familiar with low-level primitive data types (like signed/unsigned int, int64, etc.)

Field

Fields are primitive objects that hold data, and can be converted to (and from) bytes:

>>> from hydration import *
>>> f = UInt16(1512)
>>> bytes(f)
b'\xe8\x05'
>>> UInt16().from_bytes(b'\xe8\x05')
UInt16(1512)

Struct

A struct is a composite of fields. To create a struct, Inherit from Struct:

from hydration import *

class MyStruct(Struct):
    a = UInt8
    b = UInt8(value=3)  # You can set the default value
>>> st = MyStruct(a=10)  # Structs can receive field values as keyword arguments
>>> print(st) 
MyStruct
    a:	UInt8(10)
    b:	UInt8(3)
>>> bytes(st)
b'\n\x03'
>>> print(MyStruct.from_bytes(b'\n\x03'))
MyStruct:
	a:	UInt8(10)
	b:	UInt8(3)

Message

A message is a list-like composite of structs:

from hydration import *

class Header(Struct):
    magic = UInt32(0xDEADBEEF)

class Body(Struct):
    param1 = Float(2.875)
    param2 = Int8(-128)
>>> msg = Header() / Body()  # Create a message by using the division operator on structs
>>> print(msg)
Header:
	magic:	UInt32(3735928559)
Body:
	param1:	Float(2.875)
	param2:	Int8(-128)
>>> bytes(msg)
b'\xef\xbe\xad\xde\x00\x008@\x80'

Advanced features

For more advanced usage, be sure to check the docs folder.

Support

Want to report a bug? Request a feature? Please do so here

Maintainers