/// Acknowledgment message sent by client to confirm message receipt class AcknowledgmentMessage { /// ID of the message being acknowledged final String messageId; /// Status of the acknowledgment final AcknowledgmentStatus status; /// Timestamp when the acknowledgment was created final DateTime timestamp; /// Optional error message if status is FAILED final String? errorMessage; AcknowledgmentMessage({ required this.messageId, required this.status, required this.timestamp, this.errorMessage, }); /// Create AcknowledgmentMessage from JSON factory AcknowledgmentMessage.fromJson(Map json) { return AcknowledgmentMessage( messageId: json['messageId'] as String, status: AcknowledgmentStatus.fromString(json['status'] as String), timestamp: DateTime.parse(json['timestamp'] as String), errorMessage: json['errorMessage'] as String?, ); } /// Convert AcknowledgmentMessage to JSON Map toJson() { return { 'messageId': messageId, 'status': status.toString(), 'timestamp': timestamp.toIso8601String(), if (errorMessage != null) 'errorMessage': errorMessage, }; } @override String toString() { return 'AcknowledgmentMessage(messageId: $messageId, status: $status)'; } } /// Status of an acknowledgment enum AcknowledgmentStatus { /// Message was received by the client received, /// Message was processed successfully processed, /// Message processing failed failed; /// Convert string to AcknowledgmentStatus static AcknowledgmentStatus fromString(String value) { switch (value.toUpperCase()) { case 'RECEIVED': return AcknowledgmentStatus.received; case 'PROCESSED': return AcknowledgmentStatus.processed; case 'FAILED': return AcknowledgmentStatus.failed; default: return AcknowledgmentStatus.received; } } @override String toString() { switch (this) { case AcknowledgmentStatus.received: return 'RECEIVED'; case AcknowledgmentStatus.processed: return 'PROCESSED'; case AcknowledgmentStatus.failed: return 'FAILED'; } } }