__all__ = [
'ContactLinkEntry',
]
from typing import List
from ._helpers import BytesReader
from ..constants import st
from .entry_id import EntryID
class ContactLinkEntry:
entries: List[EntryID]
def __init__(self, data: bytes):
# My experience with this data almost entirely doesn't match the
# documentation, so I'm just going to do what I see and not what I'm
# told.
reader = BytesReader(data)
count = reader.readUnsignedInt()
# Ignore this field.
reader.read(4)
self.entries = []
for _ in range(count):
size = reader.readUnsignedInt()
self.entries.append(EntryID.autoCreate(reader.read(size)))
if (size & 3) != 0:
reader.read(4 - (size & 3))
def __bytes__(self) -> bytes:
return self.toBytes()
def toBytes(self) -> bytes:
ret = st.ST_LE_UI32.pack(len(self.entries))
# Need to handle the data before hand.
data = b''
for entry in self.entries:
entryData = entry.toBytes()
# Size goes before data.
data += st.ST_LE_UI32.pack(edLen := len(entryData))
data += entryData
# Handle padding.
if edLen & 3:
data += b'\x00' * (4 - edLen)
ret += st.ST_LE_UI32.pack(len(data))
ret += data
return ret