| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- # general.py/Open GoPro, Version 2.0 (C) Copyright 2021 GoPro, Inc. (http://gopro.com/OpenGoPro).
- # This copyright was auto-generated on Mon Apr 21 22:24:00 UTC 2025
- """Monolithic Parser implementations"""
- from typing import Any
- from construct import BitsInteger, BitStruct, Flag, Int8ub, Int32ub, Padding
- from open_gopro.domain.parser_interface import BytesParserBuilder
- from open_gopro.models import ScheduledCapture
- from open_gopro.parsers.bytes import ConstructDataclassByteParserBuilder
- ScheduledCaptureParser = ConstructDataclassByteParserBuilder(
- construct=BitStruct(
- Padding(19),
- "hour" / BitsInteger(5),
- "minute" / BitsInteger(6),
- "is_24_hour" / Flag,
- "is_enabled" / Flag,
- ),
- data_class=ScheduledCapture,
- int_builder=Int32ub,
- )
- class IntByteParserBuilder(BytesParserBuilder[int]):
- """Built / parse integers to / from bytes
- Args:
- length (int): length of byte array to store integer
- Raises:
- ValueError: _description_
- """
- def __init__(self, length: int) -> None:
- match length:
- case 1:
- self._container = Int8ub
- case 4:
- self._container = Int32ub
- case _:
- raise ValueError(f"Length {length} is not handled")
- def parse(self, data: bytes) -> int: # noqa: D102
- return self._container.parse(data)
- def build(self, obj: Any) -> bytes: # noqa: D102
- match obj:
- case int():
- return self._container.build(obj)
- case str():
- return self._container.build(int(obj))
- case _:
- raise TypeError(f"Can not build bytes from object of type {type(obj)}")
|