Files
project-vesper/vesper/src/Communication/ResponseBuilder/ResponseBuilder.hpp

88 lines
3.7 KiB
C++

/*
* ═══════════════════════════════════════════════════════════════════════════════════
* RESPONSEBUILDER.HPP - Unified Response Generation System
* ═══════════════════════════════════════════════════════════════════════════════════
*
* 📡 STANDARDIZED COMMUNICATION RESPONSES 📡
*
* This class provides a unified interface for generating consistent JSON responses
* across all communication protocols (MQTT, WebSocket). It ensures all responses
* follow the same format and structure.
*
* 🏗️ ARCHITECTURE:
* • Static methods for response generation
* • Consistent JSON structure across all protocols
* • Memory-efficient response building
* • Type-safe response categories
*
* 📡 RESPONSE TYPES:
* • Success: Successful command execution
* • Error: Command execution failures
* • Status: System status reports and updates
* • Data: Information requests and telemetry
*
* 🔄 RESPONSE STRUCTURE:
* {
* "status": "OK|ERROR",
* "type": "command_type",
* "payload": "data_or_message"
* }
*
* 📋 USAGE EXAMPLES:
* • ResponseBuilder::success("playback", "Started playing melody")
* • ResponseBuilder::error("download", "File not found")
* • ResponseBuilder::status("telemetry", telemetryData)
*
* 📋 VERSION: 1.0 (Initial unified response system)
* 📅 DATE: 2025
* 👨‍💻 AUTHOR: Advanced Bell Systems
* ═══════════════════════════════════════════════════════════════════════════════════
*/
#pragma once
#include <Arduino.h>
#include <ArduinoJson.h>
#include "../../Player/Player.hpp" // For PlayerStatus enum
class ResponseBuilder {
public:
// Response status types
enum class Status {
SUCCESS,
ERROR,
INFO
};
// Main response builders
static String success(const String& type, const String& payload = "");
static String success(const String& type, const JsonObject& payload);
static String error(const String& type, const String& message);
static String status(const String& type, const JsonObject& data);
static String status(const String& type, const String& data);
// Specialized response builders for common scenarios
static String acknowledgment(const String& commandType);
static String pong();
static String deviceStatus(PlayerStatus playerStatus, uint32_t timeElapsedMs, uint64_t projectedRunTime = 0);
static String melodyList(const String& fileListJson);
static String downloadResult(bool success, const String& filename = "");
static String configUpdate(const String& configType);
// Error response builders
static String invalidCommand(const String& command);
static String missingParameter(const String& parameter);
static String operationFailed(const String& operation, const String& reason = "");
static String deviceBusy();
static String unauthorized();
// Utility methods
static String buildResponse(Status status, const String& type, const String& payload);
static String buildResponse(Status status, const String& type, const JsonObject& payload);
private:
// Internal helper methods
static const char* statusToString(Status status);
static StaticJsonDocument<512> _responseDoc; // Reusable document for efficiency
};