LeviLamina
Loading...
Searching...
No Matches
Observable.h
1#pragma once
2
3#include <string>
4#include <utility>
5#include <variant>
6
7#include "ll/api/Expected.h"
8#include "ll/api/base/Macro.h"
9#include "ll/api/coro/CoroTask.h"
10#include "ll/api/data/Observable.h"
11#include "ll/api/ui/base/UIRawMessage.h"
12
13class Player;
14
15namespace ll::ui {
16
18 bool clientWritable{false};
19};
20
21template <class T>
22class UIObservable : public data::Observable<T> {
23 bool clientWritable;
24
25public:
26 explicit UIObservable(T initial, ObservableOptions options = {})
27 : data::Observable<T>(std::move(initial)),
28 clientWritable(options.clientWritable) {}
29
30 [[nodiscard]] bool isClientWritable() const noexcept { return clientWritable; }
31};
32
33class ObservableBoolean : public UIObservable<bool> {
34public:
35 using UIObservable<bool>::UIObservable;
36};
37
38class ObservableNumber : public UIObservable<double> {
39public:
40 using UIObservable<double>::UIObservable;
41};
42
43class ObservableString : public UIObservable<std::string> {
44public:
45 using UIObservable<std::string>::UIObservable;
46};
47
48class ObservableUIRawMessage : public UIObservable<UIRawMessage> {
49public:
50 using UIObservable<UIRawMessage>::UIObservable;
51};
52
53using TextValue = std::variant<std::string, UIRawMessage, ObservableString, ObservableUIRawMessage>;
54using BooleanValue = std::variant<bool, ObservableBoolean>;
55using NumberValue = std::variant<double, ObservableNumber>;
56
57} // namespace ll::ui
Definition Player.h:137
Definition Observable.h:13
Definition Observable.h:33
Definition Observable.h:38
Definition Observable.h:43
Definition Observable.h:48
Definition UIRawMessage.h:15
Definition Observable.h:17