""" Struct constants. """ __all__ = [ 'ST_BC_FIELD_INFO', 'ST_BC_HEAD', 'ST_BE_F32', 'ST_BE_F64', 'ST_BE_I16', 'ST_BE_I32', 'ST_BE_I64', 'ST_BE_I8', 'ST_BE_UI16', 'ST_BE_UI32', 'ST_BE_UI64', 'ST_BE_UI8', 'ST_CF_DIR_ENTRY', 'ST_GUID', 'ST_LE_F32', 'ST_LE_F64', 'ST_LE_I16', 'ST_LE_I32', 'ST_LE_I64', 'ST_LE_I8', 'ST_LE_UI16', 'ST_LE_UI32', 'ST_LE_UI64', 'ST_LE_UI8', 'ST_NP_ENT', 'ST_PEID', 'ST_PROP_BASE', 'ST_PROP_VAR', 'ST_PROPSTORE_HEADER', 'ST_RGB', 'ST_SBO_I8', 'ST_SBO_I16', 'ST_SBO_I32', 'ST_SBO_I64', 'ST_SBO_UI8', 'ST_SBO_UI16', 'ST_SBO_UI32', 'ST_SBO_UI64', 'ST_SYSTEMTIME', 'ST_TZ', ] import struct from typing import Final # Define pre-compiled structs to make unpacking slightly faster. # General structs. ST_PROPSTORE_HEADER: Final[struct.Struct] = struct.Struct('<8x4I') ST_PROP_BASE: Final[struct.Struct] = struct.Struct('<2HI') # Struct used for unpacking a system time. ST_SYSTEMTIME: Final[struct.Struct] = struct.Struct('<8H') # Struct used for unpacking a GUID from bytes. ST_GUID: Final[struct.Struct] = struct.Struct('b') ST_BE_I16: Final[struct.Struct] = struct.Struct('>h') ST_BE_I32: Final[struct.Struct] = struct.Struct('>i') ST_BE_I64: Final[struct.Struct] = struct.Struct('>q') ST_BE_UI8: Final[struct.Struct] = struct.Struct('>B') ST_BE_UI16: Final[struct.Struct] = struct.Struct('>H') ST_BE_UI32: Final[struct.Struct] = struct.Struct('>I') ST_BE_UI64: Final[struct.Struct] = struct.Struct('>Q') ST_BE_F32: Final[struct.Struct] = struct.Struct('>f') ST_BE_F64: Final[struct.Struct] = struct.Struct('>d') # Structs that use the system byte order, where consistency on a single system # is all that matters. Mainly used for quick casts between signed and unsigned. ST_SBO_I8: Final[struct.Struct] = struct.Struct('@b') ST_SBO_I16: Final[struct.Struct] = struct.Struct('@h') ST_SBO_I32: Final[struct.Struct] = struct.Struct('@i') ST_SBO_I64: Final[struct.Struct] = struct.Struct('@q') ST_SBO_UI8: Final[struct.Struct] = struct.Struct('@B') ST_SBO_UI16: Final[struct.Struct] = struct.Struct('@H') ST_SBO_UI32: Final[struct.Struct] = struct.Struct('@I') ST_SBO_UI64: Final[struct.Struct] = struct.Struct('@Q') # Struct for an RGB value that, in little endian, would be an int written in hex # as 0x00BBGGRR. ST_RGB: Final[struct.Struct] = struct.Struct('