Skip to main content

similar function to the builtin struct-library but more friendly

Project description

structurelib-py

similar function to the builtin struct-library but more friendly

Installation

PyPI - Version

pip install structurelib

Examples

Example 1: Basic

from dataclasses import dataclass
import structurelib as sl
from structurelib.types import *

@dataclass
class MyStruct(sl.Structure):  # sl.Structure inheritance is optional
    name: str  # `string` is also possible
    value: int8

sl.dumps(MyStruct("Hello World", 8))  # b'\x0bHello World\x08'
MyStruct.dump_struct(MyStruct("Hello World", 8))  # b'\x0bHello World\x08'
sl.loads(b'\x0bHello World\x08', cls=MyStruct)  # MyStruct(name="Hello World", value=8)
MyStruct.load_struct(b'\x0bHello World\x08')  # MyStruct(name="Hello World", value=8)

Example 2: Nested Objects

import dataclasses
import structurelib as sl
from structurelib.types import *


@dataclasses.dataclass
class Credentials:
    name: string
    password: string


@dataclasses.dataclass
class User:
    name: string
    credentials: Credentials


instance = User("hello", Credentials("hello", "world"))
print(instance)  # User(name="hello", Credentials(name="hello", password="world"))
sld = sl.dumps(instance)
print(f"dump | {len(sld):>3} | {sld}")
loaded = sl.loads(sld, cls=User)
print(loaded)  # User(name="hello", Credentials(name="hello", password="world"))

Documentation

Supported types

You can keep it basic and continue to use the builtin types and it should work

class MyStruct:
    name: str
    number: int

But you can also add the additional types by importing them at the top of your file. These types can reduce the output size.

from structurelib.types import *

All additional types can be used without problem to replace the old ones and won't interfere with typechecking.

class MyStruct:
    name: string
    number: uint16
type description size values
int/integer any integer dynamic -∞ - +∞
integer[n, False] integer n byte 0 - 28*n
integer[n, True] integer n byte -28*(n-1) - 28*(n-1)
int8 integer 1 byte -128 - 127
int16 integer 2 bytes -32,768 - 32,767
int32 integer 4 bytes -2,147,483,648 - 2,147,483,647
int64 integer 8 bytes -9,223,372,036,854,775,808 - 9,223,372,036,854,775,807
uint any positive integer dynamic 0 - +∞
uint8 positive integer 1 byte 0 - 255
uint16 positive integer 2 bytes 0 - 65,535
uint32 positive integer 4 bytes 0 - 4,294,967,295
uint64 positive integer 8 bytes 0 - 18,446,744,073,709,551,615
float/floating floating point number 8 bytes -1.7e308 - 1.7e308
float32 floating point number 4 bytes -3.4e38 - 3.4e38
float64 floating point number 8 bytes -1.7e308 - 1.7e308
str/string text of any kind dynamic
string[n] text with encoded length n n bytes
char single character 1 byte *0-255
bytes/binary any binary data dynamic
binary[n] binary data with length n n nyte
bool/boolean boolean value 1 byte True/False

Other builtin types like list, dict, set and so on are currently not supported.

dumps()

dump any object into bytes

Note: only annotations of a class are dumped and later reconstructed

def dumps(obj: object) -> bytes: ...

loads()

reconstructs object of cls from the dumped data

def loads(dump: bytes | BinaryIO, cls: Type[T]) -> T: ...

Structure-class

This class is only for convenience and wraps the dumps and loads functions.

class Structure:
    @classmethod
    def load_struct(cls: Type[T], dump: bytes | BinaryIO) -> T: ...
    def dump_struct(self) -> bytes: ...

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

structurelib-0.1.0.tar.gz (9.1 kB view details)

Uploaded Source

Built Distribution

structurelib-0.1.0-py3-none-any.whl (9.2 kB view details)

Uploaded Python 3

File details

Details for the file structurelib-0.1.0.tar.gz.

File metadata

  • Download URL: structurelib-0.1.0.tar.gz
  • Upload date:
  • Size: 9.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.12

File hashes

Hashes for structurelib-0.1.0.tar.gz
Algorithm Hash digest
SHA256 9670ececef52b0a126f7553f6e17bb91368015d48668953b82c9a4d1adb9e432
MD5 676ac0b37f23c4634a5c2899db73637e
BLAKE2b-256 b3bef49598eabb4b31e526d6f9495c9071658d0c7daa390e2e28dd55719f63a8

See more details on using hashes here.

File details

Details for the file structurelib-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: structurelib-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 9.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.12

File hashes

Hashes for structurelib-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ce1c37a03737e7971d1f3047a612e5a80d532baf5acfb736e8c6dcf837a14ff6
MD5 8f10175b11dfe0565004ae52e972136a
BLAKE2b-256 c618feff4183a2fabcf549610142b331f2e39a77f0a0dc0da3e18317790b5d3c

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