#pragma once #include #include namespace diality { // Payload version and flags static constexpr quint8 kPayloadVersion = 0x01; static constexpr quint8 kFlagCompressed = 0x01; // TLV types (all values are UTF-8 strings) static constexpr quint8 kT_PartId = 0x01; // string static constexpr quint8 kT_Lot = 0x02; // string static constexpr quint8 kT_ExpDate = 0x03; // string (recommended: YYYYMMDD) static constexpr quint8 kT_Serial = 0x04; // string struct ParsedFields { QString partId; QString lot; QString exp; // keep as string (device can validate/format) QString serial; }; QByteArray buildTlvPayload( const QString& partId, const QString& lot, const QString& exp, const QString& serial, bool enableCompression, bool* outCompressed, QString* outError ); bool parseTlvPayload( const QByteArray& plaintext, ParsedFields* outFields, QString* outError ); // Parse a simple key-value input: // PID=...|LOT=...|EXP=...|SN=... // Accepts any string values (trimmed). Case-insensitive keys. bool parseKeyValueInput( const QString& input, QString* outPartId, QString* outLot, QString* outExp, QString* outSerial, QString* outError ); } // namespace diality