hydration
hydration copied to clipboard
Define python objects that can be safely converted to (and from) bytes.
Hydration
This software has been designed for you, with much joy, by Michael Shustin
You can find the complete documentation here
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 documentation.
Support
Want to report a bug? Request a feature? Please do so here
Maintainers
- Michael Shustin (Author)
- Aviv Atedgi