ORE Studio 0.0.4
Loading...
Searching...
No Matches
feature_flags_protocol.hpp
1/* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2 *
3 * Copyright (C) 2025 Marco Craveiro <marco.craveiro@gmail.com>
4 *
5 * This program is free software; you can redistribute it and/or modify it under
6 * the terms of the GNU General Public License as published by the Free Software
7 * Foundation; either version 3 of the License, or (at your option) any later
8 * version.
9 *
10 * This program is distributed in the hope that it will be useful, but WITHOUT
11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
12 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
13 * details.
14 *
15 * You should have received a copy of the GNU General Public License along with
16 * this program; if not, write to the Free Software Foundation, Inc., 51
17 * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18 *
19 */
20#ifndef ORES_VARIABILITY_MESSAGING_FEATURE_FLAGS_PROTOCOL_HPP
21#define ORES_VARIABILITY_MESSAGING_FEATURE_FLAGS_PROTOCOL_HPP
22
23#include <span>
24#include <iosfwd>
25#include <vector>
26#include <expected>
27#include "ores.comms/messaging/message_types.hpp"
28#include "ores.comms/messaging/message_traits.hpp"
29#include "ores.variability/domain/feature_flags.hpp"
30
32
37 std::vector<std::byte> serialize() const;
38 static std::expected<get_feature_flags_request, ores::utility::serialization::error_code>
39 deserialize(std::span<const std::byte> data);
40};
41
42std::ostream& operator<<(std::ostream& s, const get_feature_flags_request& v);
43
48 std::vector<domain::feature_flags> feature_flags;
49
50 std::vector<std::byte> serialize() const;
51 static std::expected<get_feature_flags_response, ores::utility::serialization::error_code>
52 deserialize(std::span<const std::byte> data);
53};
54
55std::ostream& operator<<(std::ostream& s, const get_feature_flags_response& v);
56
64
65 std::vector<std::byte> serialize() const;
66 static std::expected<save_feature_flag_request, ores::utility::serialization::error_code>
67 deserialize(std::span<const std::byte> data);
68};
69
70std::ostream& operator<<(std::ostream& s, const save_feature_flag_request& v);
71
76 bool success = false;
77 std::string error_message;
78
79 std::vector<std::byte> serialize() const;
80 static std::expected<save_feature_flag_response, ores::utility::serialization::error_code>
81 deserialize(std::span<const std::byte> data);
82};
83
84std::ostream& operator<<(std::ostream& s, const save_feature_flag_response& v);
85
90 std::string name;
91
92 std::vector<std::byte> serialize() const;
93 static std::expected<delete_feature_flag_request, ores::utility::serialization::error_code>
94 deserialize(std::span<const std::byte> data);
95};
96
97std::ostream& operator<<(std::ostream& s, const delete_feature_flag_request& v);
98
103 bool success = false;
104 std::string error_message;
105
106 std::vector<std::byte> serialize() const;
107 static std::expected<delete_feature_flag_response, ores::utility::serialization::error_code>
108 deserialize(std::span<const std::byte> data);
109};
110
111std::ostream& operator<<(std::ostream& s, const delete_feature_flag_response& v);
112
117 std::string name;
118
119 std::vector<std::byte> serialize() const;
120 static std::expected<get_feature_flag_history_request, ores::utility::serialization::error_code>
121 deserialize(std::span<const std::byte> data);
122};
123
124std::ostream& operator<<(std::ostream& s, const get_feature_flag_history_request& v);
125
130 bool success = false;
131 std::string message;
132 std::vector<domain::feature_flags> history; // Ordered newest-first
133
134 std::vector<std::byte> serialize() const;
135 static std::expected<get_feature_flag_history_response, ores::utility::serialization::error_code>
136 deserialize(std::span<const std::byte> data);
137};
138
139std::ostream& operator<<(std::ostream& s, const get_feature_flag_history_response& v);
140
141}
142
143namespace ores::comms::messaging {
144
148template<>
149struct message_traits<variability::messaging::get_feature_flags_request> {
152 static constexpr message_type request_message_type =
153 message_type::get_feature_flags_request;
154};
155
159template<>
160struct message_traits<variability::messaging::save_feature_flag_request> {
163 static constexpr message_type request_message_type =
164 message_type::save_feature_flag_request;
165};
166
170template<>
171struct message_traits<variability::messaging::delete_feature_flag_request> {
174 static constexpr message_type request_message_type =
175 message_type::delete_feature_flag_request;
176};
177
181template<>
182struct message_traits<variability::messaging::get_feature_flag_history_request> {
185 static constexpr message_type request_message_type =
186 message_type::get_feature_flag_history_request;
187};
188
189}
190
191#endif
Contains messaging related infrastructure in the comms library.
Definition assets_protocol.hpp:122
std::basic_ostream< CharT, TraitsT > & operator<<(std::basic_ostream< CharT, TraitsT > &stream, boost_severity level)
Inserter for boost_severity enum.
Definition boost_severity.hpp:80
Network messaging infrastructure for the variability module.
Definition feature_flags_protocol.hpp:31
Traits template for mapping request types to their response types and message type enum values.
Definition message_traits.hpp:66
Represents a feature flag in the domain layer.
Definition feature_flags.hpp:31
Request to retrieve all feature flags.
Definition feature_flags_protocol.hpp:36
Response containing all feature flags.
Definition feature_flags_protocol.hpp:47
Request to save (create or update) a feature flag.
Definition feature_flags_protocol.hpp:62
Response to save feature flag request.
Definition feature_flags_protocol.hpp:75
Request to delete a feature flag by name.
Definition feature_flags_protocol.hpp:89
Response to delete feature flag request.
Definition feature_flags_protocol.hpp:102
Request to retrieve feature flag history by name.
Definition feature_flags_protocol.hpp:116
Response containing feature flag history.
Definition feature_flags_protocol.hpp:129