31 #ifndef LEDGER_CORE_PROMISE_HPP 32 #define LEDGER_CORE_PROMISE_HPP 34 #include "utils/Try.hpp" 35 #include "utils/Option.hpp" 36 #include "utils/Exception.hpp" 46 _deffer = std::make_shared<Deffered<T>>();
48 Promise(
const T& value) : Promise() {
52 Promise(
const Exception& failure) : Promise() {
53 this->failure(failure);
56 void complete(
const Try<T>& result) {
57 _deffer->setResult(result);
60 bool tryComplete(
const Try<T>& result) {
61 return Try<Unit>::from([result,
this] () {
67 void completeWith(
const Future<T>& future) {
68 auto deffer = _deffer;
70 f.onComplete(ImmediateExecutionContext::INSTANCE, [deffer] (
const Try<T>& result) {
71 deffer->setResult(result);
75 void tryCompleteWith(
const Future<T>& future) {
76 auto deffer = _deffer;
78 f.onComplete(ImmediateExecutionContext::INSTANCE, [deffer] (
const Try<T>& result) {
79 Try<Unit>::from([result, deffer] () {
80 deffer->setResult(result);
86 bool trySuccess(
const T& value) {
87 return Try<Unit>::from([value,
this] () {
93 bool tryFailure(
const Exception& exception) {
94 return Try<Unit>::from([exception,
this] () {
100 void success(
const T& value) {
101 _deffer->setValue(value);
104 void failure(
const Exception& exception) {
105 _deffer->setError(exception);
108 bool isCompleted()
const {
109 return _deffer->hasValue();
112 Future<T> getFuture()
const {
113 return Future<T>(_deffer);
117 std::shared_ptr<Deffered<T>> _deffer;
120 template <
typename T>
121 using PromisePtr = Promise<std::shared_ptr<T>>;
126 #endif //LEDGER_CORE_PROMISE_HPP Definition: Account.cpp:8