36 lines
1.0 KiBLFS
Python
36 lines
1.0 KiBLFS
Python
# from BlkTypes import BlkTypes
|
|
from typing import Union
|
|
|
|
from ..blk.ParamParser import BLKTypes
|
|
import dataclasses
|
|
|
|
|
|
@dataclasses.dataclass
|
|
class Chunk:
|
|
name: str
|
|
data_type_raw: int
|
|
data_type: str
|
|
data_raw: bytes
|
|
data: Union[int, list[int], float, list[float], bool, str, dict]
|
|
|
|
|
|
class ChunkParser:
|
|
"""
|
|
a helper class that stores a converter and a name map.
|
|
stores relevant information that could later on be used to generate true blk files, currently only
|
|
name and data are actually used.
|
|
"""
|
|
|
|
def __init__(self, name_map: list[str], converter: BLKTypes):
|
|
self.name_map = name_map
|
|
self.converter = converter
|
|
|
|
def parse(self, data: bytes) -> Chunk:
|
|
|
|
name_raw = data[0:3]
|
|
name = self.name_map[int.from_bytes(name_raw, 'little')]
|
|
data_type_raw = data[3]
|
|
data_type: str = BLKTypes.types[data_type_raw]
|
|
data_raw = data[4:]
|
|
data = self.converter.fromRawParamInfo(data_type_raw, data_raw)
|
|
return Chunk(name, data_type_raw, data_type, data_raw, data) |