From eebcb4f364f8a6b691193df39e1472561ce9a5ee Mon Sep 17 00:00:00 2001 From: Simon Brunel Date: Fri, 7 Sep 2018 17:50:09 +0200 Subject: [PATCH] Migrate documentation to VuePress GitBook development seems a bit stuck right now so let's switch to VuePress which, IMO, is more user friendly. Update the documentation to include the version number in which features were added and use custom container to display notes and warnings. --- README.md | 10 +++-- book.json | 40 ------------------ docs/.vuepress/config.js | 54 +++++++++++++++++++++++++ docs/.vuepress/override.styl | 2 + docs/.vuepress/public/favicon.ico | Bin 0 -> 34494 bytes docs/.vuepress/public/favicon.png | Bin 0 -> 21265 bytes docs/.vuepress/style.styl | 4 ++ docs/README.md | 6 --- docs/SUMMARY.md | 29 ------------- docs/assets/style.css | 15 ------- docs/qtpromise/api-reference.md | 10 ++--- docs/qtpromise/getting-started.md | 4 +- docs/qtpromise/helpers/attempt.md | 8 +++- docs/qtpromise/helpers/each.md | 14 +++++-- docs/qtpromise/helpers/filter.md | 12 +++++- docs/qtpromise/helpers/map.md | 12 +++++- docs/qtpromise/helpers/qpromise.md | 8 +++- docs/qtpromise/helpers/qpromiseall.md | 8 +++- docs/qtpromise/qpromise/all.md | 8 +++- docs/qtpromise/qpromise/constructor.md | 14 +++++-- docs/qtpromise/qpromise/delay.md | 10 ++++- docs/qtpromise/qpromise/each.md | 12 +++++- docs/qtpromise/qpromise/fail.md | 10 ++++- docs/qtpromise/qpromise/filter.md | 16 ++++++-- docs/qtpromise/qpromise/finally.md | 10 ++++- docs/qtpromise/qpromise/isfulfilled.md | 10 ++++- docs/qtpromise/qpromise/ispending.md | 10 ++++- docs/qtpromise/qpromise/isrejected.md | 10 ++++- docs/qtpromise/qpromise/map.md | 16 ++++++-- docs/qtpromise/qpromise/reject.md | 10 ++++- docs/qtpromise/qpromise/resolve.md | 8 +++- docs/qtpromise/qpromise/tap.md | 10 ++++- docs/qtpromise/qpromise/tapfail.md | 10 ++++- docs/qtpromise/qpromise/then.md | 24 ++++++++--- docs/qtpromise/qpromise/timeout.md | 10 ++++- docs/qtpromise/qpromise/wait.md | 10 ++++- docs/qtpromise/qtconcurrent.md | 2 +- docs/qtpromise/thread-safety.md | 6 ++- 38 files changed, 297 insertions(+), 155 deletions(-) delete mode 100644 book.json create mode 100644 docs/.vuepress/config.js create mode 100644 docs/.vuepress/override.styl create mode 100644 docs/.vuepress/public/favicon.ico create mode 100644 docs/.vuepress/public/favicon.png create mode 100644 docs/.vuepress/style.styl delete mode 100644 docs/SUMMARY.md delete mode 100644 docs/assets/style.css diff --git a/README.md b/README.md index 51439a6..90b6b6e 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ Promises/A+ # QtPromise + [![qpm](https://img.shields.io/github/release/simonbrunel/qtpromise.svg?style=flat-square&label=qpm&colorB=4CAF50)](https://www.qpm.io/packages/com.github.simonbrunel.qtpromise/index.html) [![Travis](https://img.shields.io/travis/simonbrunel/qtpromise/master.svg?style=flat-square)](https://travis-ci.org/simonbrunel/qtpromise) [![coverage](https://img.shields.io/codecov/c/github/simonbrunel/qtpromise.svg?style=flat-square)](https://codecov.io/gh/simonbrunel/qtpromise) [Promises/A+](https://promisesaplus.com/) implementation for [Qt/C++](https://www.qt.io/). @@ -9,10 +10,11 @@ Requires [Qt 5.6](https://www.qt.io/download/) (or later) with [C++11 support en ## Documentation -* [Getting Started](https://qtpromise.netlify.com/qtpromise/getting-started) -* [Thread-Safety](https://qtpromise.netlify.com/qtpromise/thread-safety) -* [QtConcurrent](https://qtpromise.netlify.com/qtpromise/qtconcurrent) -* [API Reference](https://qtpromise.netlify.com/qtpromise/api-reference) +* [Getting Started](https://qtpromise.netlify.com/qtpromise/getting-started.html) +* [QtConcurrent](https://qtpromise.netlify.com/qtpromise/qtconcurrent.html) +* [Thread-Safety](https://qtpromise.netlify.com/qtpromise/thread-safety.html) +* [API Reference](https://qtpromise.netlify.com/qtpromise/api-reference.html) ## License + QtPromise is available under the [MIT license](LICENSE). diff --git a/book.json b/book.json deleted file mode 100644 index 6687058..0000000 --- a/book.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "title": "QtPromise", - "description": "Promises/A+ implementation for Qt/C++", - "author": "Simon Brunel", - "gitbook": "3.2.3", - "root": "docs", - "plugins": [ - "-lunr", - "-search", - "search-plus", - "anchorjs", - "edit-link", - "expand-active-chapter", - "ga", - "github" - ], - "pluginsConfig": { - "anchorjs": { - "icon": "#", - "placement": "left", - "visible": "always" - }, - "edit-link": { - "base": "https://github.com/simonbrunel/qtpromise/edit/master/docs" - }, - "ga": { - "token": "UA-113899811-1", - "configuration": "auto" - }, - "github": { - "url": "https://github.com/simonbrunel/qtpromise" - }, - "theme-default": { - "showLevel": false, - "styles": { - "website": "assets/style.css" - } - } - } -} diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js new file mode 100644 index 0000000..6afd0ce --- /dev/null +++ b/docs/.vuepress/config.js @@ -0,0 +1,54 @@ +module.exports = { + title: 'QtPromise', + description: 'Promises/A+ implementation for Qt/C++', + ga: 'UA-113899811-1', + head: [ + ['link', { rel: 'icon', href: `/favicon.png` }], + ], + themeConfig: { + repo: 'simonbrunel/qtpromise', + lastUpdated: 'Last Updated', + editLinks: true, + docsDir: 'docs', + sidebar: [ + 'qtpromise/getting-started', + 'qtpromise/qtconcurrent', + 'qtpromise/thread-safety', + 'qtpromise/api-reference', + { + title: 'QPromise', + children: [ + 'qtpromise/qpromise/constructor', + 'qtpromise/qpromise/delay', + 'qtpromise/qpromise/each', + 'qtpromise/qpromise/fail', + 'qtpromise/qpromise/filter', + 'qtpromise/qpromise/finally', + 'qtpromise/qpromise/isfulfilled', + 'qtpromise/qpromise/ispending', + 'qtpromise/qpromise/isrejected', + 'qtpromise/qpromise/map', + 'qtpromise/qpromise/tap', + 'qtpromise/qpromise/tapfail', + 'qtpromise/qpromise/then', + 'qtpromise/qpromise/timeout', + 'qtpromise/qpromise/wait', + 'qtpromise/qpromise/all.md', + 'qtpromise/qpromise/reject.md', + 'qtpromise/qpromise/resolve.md' + ] + }, + { + title: 'Helpers', + children: [ + 'qtpromise/helpers/attempt', + 'qtpromise/helpers/each', + 'qtpromise/helpers/filter', + 'qtpromise/helpers/map', + 'qtpromise/helpers/qpromise', + 'qtpromise/helpers/qpromiseall' + ] + } + ] + } +} diff --git a/docs/.vuepress/override.styl b/docs/.vuepress/override.styl new file mode 100644 index 0000000..984aad2 --- /dev/null +++ b/docs/.vuepress/override.styl @@ -0,0 +1,2 @@ +$accentColor = #23b223 +$textColor = #404244 diff --git a/docs/.vuepress/public/favicon.ico b/docs/.vuepress/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..50cb9fdf100f945d43c889557ef3548bc3223231 GIT binary patch literal 34494 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 literal 0 HcmV?d00001 diff --git a/docs/.vuepress/public/favicon.png b/docs/.vuepress/public/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..31c7d07dbbeb15578e26a357b1ec63e3d0bf01c4 GIT binary patch literal 21265 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 M07*qoM6N<$f|W03HUIzs literal 0 HcmV?d00001 diff --git a/docs/.vuepress/style.styl b/docs/.vuepress/style.styl new file mode 100644 index 0000000..8583e44 --- /dev/null +++ b/docs/.vuepress/style.styl @@ -0,0 +1,4 @@ +@import 'override.styl' + +.content a code + color: $accentColor diff --git a/docs/README.md b/docs/README.md index a41087f..38ffc2a 100644 --- a/docs/README.md +++ b/docs/README.md @@ -5,11 +5,5 @@ Requires [Qt 5.6](https://www.qt.io/download/) (or later) with [C++11 support enabled](https://wiki.qt.io/How_to_use_C++11_in_your_Qt_Projects). -## QtPromise for C++ -* [Getting Started](qtpromise/getting-started.md) -* [Thread-Safety](qtpromise/thread-safety.md) -* [QtConcurrent](qtpromise/qtconcurrent.md) -* [API Reference](qtpromise/api-reference.md) - ## License QtPromise is available under the [MIT license](https://github.com/simonbrunel/qtpromise/blob/master/LICENSE). diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md deleted file mode 100644 index a2b88ba..0000000 --- a/docs/SUMMARY.md +++ /dev/null @@ -1,29 +0,0 @@ -### QtPromise for C++ -* [Getting Started](qtpromise/getting-started.md) -* [QtConcurrent](qtpromise/qtconcurrent.md) -* [Thread-Safety](qtpromise/thread-safety.md) -* [API Reference](qtpromise/api-reference.md) - * [QPromise](qtpromise/qpromise/constructor.md) - * [.delay](qtpromise/qpromise/delay.md) - * [.each](qtpromise/qpromise/each.md) - * [.fail](qtpromise/qpromise/fail.md) - * [.filter](qtpromise/qpromise/filter.md) - * [.finally](qtpromise/qpromise/finally.md) - * [.isFulfilled](qtpromise/qpromise/isfulfilled.md) - * [.isPending](qtpromise/qpromise/ispending.md) - * [.isRejected](qtpromise/qpromise/isrejected.md) - * [.map](qtpromise/qpromise/map.md) - * [.tap](qtpromise/qpromise/tap.md) - * [.tapFail](qtpromise/qpromise/tapfail.md) - * [.then](qtpromise/qpromise/then.md) - * [.timeout](qtpromise/qpromise/timeout.md) - * [.wait](qtpromise/qpromise/wait.md) - * [::all (static)](qtpromise/qpromise/all.md) - * [::reject (static)](qtpromise/qpromise/reject.md) - * [::resolve (static)](qtpromise/qpromise/resolve.md) - * [qPromise](qtpromise/helpers/qpromise.md) - * [qPromiseAll](qtpromise/helpers/qpromiseall.md) - * [QtPromise::attempt](qtpromise/helpers/attempt.md) - * [QtPromise::each](qtpromise/helpers/each.md) - * [QtPromise::filter](qtpromise/helpers/filter.md) - * [QtPromise::map](qtpromise/helpers/map.md) diff --git a/docs/assets/style.css b/docs/assets/style.css deleted file mode 100644 index acdd3e5..0000000 --- a/docs/assets/style.css +++ /dev/null @@ -1,15 +0,0 @@ -a.anchorjs-link { - color: rgba(65, 131, 196, 0.1); - font-weight: 400; - text-decoration: none; - transition: color 100ms ease-out; - z-index: 999; -} - -a.anchorjs-link:hover { - color: rgba(65, 131, 196, 1); -} - -sup { - font-size: 0.75em !important; -} diff --git a/docs/qtpromise/api-reference.md b/docs/qtpromise/api-reference.md index b14b6c9..d4112dd 100644 --- a/docs/qtpromise/api-reference.md +++ b/docs/qtpromise/api-reference.md @@ -1,6 +1,6 @@ -## QPromise +# API Reference -### Public Members +## Functions * [`QPromise::QPromise`](qpromise/constructor.md) * [`QPromise::delay`](qpromise/delay.md) @@ -18,7 +18,7 @@ * [`QPromise::timeout`](qpromise/timeout.md) * [`QPromise::wait`](qpromise/wait.md) -### Public Static Members +## Static Functions * [`[static] QPromise::all`](qpromise/all.md) * [`[static] QPromise::reject`](qpromise/reject.md) @@ -26,9 +26,9 @@ ## Helpers -* [`qPromise`](helpers/qpromise.md) -* [`qPromiseAll`](helpers/qpromiseall.md) * [`QtPromise::attempt`](helpers/attempt.md) * [`QtPromise::each`](helpers/each.md) * [`QtPromise::filter`](helpers/filter.md) * [`QtPromise::map`](helpers/map.md) +* [`qPromise`](helpers/qpromise.md) +* [`qPromiseAll`](helpers/qpromiseall.md) diff --git a/docs/qtpromise/getting-started.md b/docs/qtpromise/getting-started.md index 36548bc..f873b3e 100644 --- a/docs/qtpromise/getting-started.md +++ b/docs/qtpromise/getting-started.md @@ -1,8 +1,10 @@ +# Getting Started + ## Installation QtPromise is a [header-only](https://en.wikipedia.org/wiki/Header-only) library, simply download the [latest release](https://github.com/simonbrunel/qtpromise/releases/latest) (or [`git submodule`](https://git-scm.com/docs/git-submodule)) and include `qtpromise.pri` from your project `.pro`. -## qpm +### qpm Alternatively and **only** if your project relies on [qpm](https://www.qpm.io/), you can install QtPromise as follow: diff --git a/docs/qtpromise/helpers/attempt.md b/docs/qtpromise/helpers/attempt.md index a2908bf..50ef77c 100644 --- a/docs/qtpromise/helpers/attempt.md +++ b/docs/qtpromise/helpers/attempt.md @@ -1,4 +1,10 @@ -## `QtPromise::attempt` +--- +title: attempt +--- + +# QtPromise::attempt + +*Since: 0.4.0* ```cpp QtPromise::attempt(Functor functor, Args...) -> QPromise diff --git a/docs/qtpromise/helpers/each.md b/docs/qtpromise/helpers/each.md index fd77d51..91e03b6 100644 --- a/docs/qtpromise/helpers/each.md +++ b/docs/qtpromise/helpers/each.md @@ -1,4 +1,10 @@ -## `QtPromise::each` +--- +title: each +--- + +# QtPromise::each + +*Since: 0.4.0* ```cpp QtPromise::each(Sequence values, Functor functor) -> QPromise> @@ -8,10 +14,10 @@ QtPromise::each(Sequence values, Functor functor) -> QPromise> // - Functor: Function(T value, int index) -> void | QPromise ``` -Calls the given `functor` on each element in `values` then resolves to the original sequence -unmodified. If `functor` throws, `output` is rejected with the new exception. +Calls the given `functor` on each element in `values` then resolves to the original sequence +unmodified. If `functor` throws, `output` is rejected with the new exception. -If `functor` returns a promise (or `QFuture`), the `output` promise is delayed until all the +If `functor` returns a promise (or `QFuture`), the `output` promise is delayed until all the promises are resolved. If any of the promises fail, `output` immediately rejects with the error of the promise that rejected, whether or not the other promises are resolved. diff --git a/docs/qtpromise/helpers/filter.md b/docs/qtpromise/helpers/filter.md index 257d280..5628ea6 100644 --- a/docs/qtpromise/helpers/filter.md +++ b/docs/qtpromise/helpers/filter.md @@ -1,4 +1,10 @@ -## `QtPromise::filter` +--- +title: filter +--- + +# QtPromise::filter + +*Since: 0.4.0* ```cpp QtPromise::filter(Sequence values, Filterer filterer) -> QPromise> @@ -38,7 +44,9 @@ output.then([](const QVector& res) { }); ``` -> **Note:** the order of the output sequence values is guarantee to be the same as the original +::: tip NOTE +The order of the output sequence values is guarantee to be the same as the original sequence, regardless of completion order of the promises returned by `filterer`. +::: See also: [`QPromise::filter`](../qpromise/filter.md) diff --git a/docs/qtpromise/helpers/map.md b/docs/qtpromise/helpers/map.md index d7ab5a1..46b2b0d 100644 --- a/docs/qtpromise/helpers/map.md +++ b/docs/qtpromise/helpers/map.md @@ -1,4 +1,10 @@ -## `QtPromise::map` +--- +title: map +--- + +# QtPromise::map + +*Since: 0.4.0* ```cpp QtPromise::map(Sequence values, Mapper mapper) -> QPromise> @@ -37,7 +43,9 @@ output.then([](const QVector& res) { }); ``` -> **Note:** the order of the output sequence values is guarantee to be the same as the original +::: tip NOTE +The order of the output sequence values is guarantee to be the same as the original sequence, regardless of completion order of the promises returned by `mapper`. +::: See also: [`QPromise::map`](../qpromise/map.md) diff --git a/docs/qtpromise/helpers/qpromise.md b/docs/qtpromise/helpers/qpromise.md index 56c3996..26ddb77 100644 --- a/docs/qtpromise/helpers/qpromise.md +++ b/docs/qtpromise/helpers/qpromise.md @@ -1,4 +1,10 @@ -## `qPromise` +--- +title: qPromise +--- + +# qPromise + +*Since: 0.1.0* ``` qPromise(T value) -> QPromise diff --git a/docs/qtpromise/helpers/qpromiseall.md b/docs/qtpromise/helpers/qpromiseall.md index 9d9741f..5036ae7 100644 --- a/docs/qtpromise/helpers/qpromiseall.md +++ b/docs/qtpromise/helpers/qpromiseall.md @@ -1,4 +1,10 @@ -## `qPromiseAll` +--- +title: qPromiseAll +--- + +# qPromiseAll + +*Since: 0.1.0* ``` qPromiseAll(Sequence> promises) -> QPromise> diff --git a/docs/qtpromise/qpromise/all.md b/docs/qtpromise/qpromise/all.md index 5ecd644..ac27503 100644 --- a/docs/qtpromise/qpromise/all.md +++ b/docs/qtpromise/qpromise/all.md @@ -1,4 +1,10 @@ -## `[static] QPromise::all` +--- +title: ::all [static] +--- + +# QPromise::all [static] + +*Since: 0.1.0* ``` [static] QPromise::all(Sequence> promises) -> QPromise> diff --git a/docs/qtpromise/qpromise/constructor.md b/docs/qtpromise/qpromise/constructor.md index 302ed20..cede2a0 100644 --- a/docs/qtpromise/qpromise/constructor.md +++ b/docs/qtpromise/qpromise/constructor.md @@ -1,6 +1,12 @@ -## `QPromise::QPromise` +--- +title: constructor +--- -``` +# QPromise::QPromise + +*Since: 0.1.0* + +```cpp QPromise::QPromise(Function resolver) ``` @@ -18,7 +24,9 @@ QPromise promise([](const QPromiseResolve& resolve, const QPromiseReje }); ``` -> **Note:** `QPromise` is specialized to not contain any value, meaning that the `resolve` callback takes no argument. +::: tip NOTE +`QPromise` is specialized to not contain any value, meaning that the `resolve` callback takes no argument. +::: **C++14** diff --git a/docs/qtpromise/qpromise/delay.md b/docs/qtpromise/qpromise/delay.md index 21af63d..1069af1 100644 --- a/docs/qtpromise/qpromise/delay.md +++ b/docs/qtpromise/qpromise/delay.md @@ -1,6 +1,12 @@ -## `QPromise::delay` +--- +title: .delay +--- -``` +# QPromise::delay + +*Since: 0.2.0* + +```cpp QPromise::delay(int msec) -> QPromise ``` diff --git a/docs/qtpromise/qpromise/each.md b/docs/qtpromise/qpromise/each.md index e7567f7..4041b91 100644 --- a/docs/qtpromise/qpromise/each.md +++ b/docs/qtpromise/qpromise/each.md @@ -1,6 +1,10 @@ -## `QPromise>::each` +--- +title: .each +--- -> **Important:** applies only to promise with sequence value. +# QPromise::each + +*Since: 0.4.0* ```cpp QPromise>::each(Functor functor) -> QPromise> @@ -10,6 +14,10 @@ QPromise>::each(Functor functor) -> QPromise> // - Functor: Function(T value, int index) -> any ``` +::: warning IMPORTANT +This method only applies to promise with sequence value. +::: + Calls the given `functor` on each element in the promise value (i.e. `Sequence`), then resolves to the original sequence unmodified. If `functor` throws, `output` is rejected with the new exception. ```cpp diff --git a/docs/qtpromise/qpromise/fail.md b/docs/qtpromise/qpromise/fail.md index 5b6d8ec..98e5a74 100644 --- a/docs/qtpromise/qpromise/fail.md +++ b/docs/qtpromise/qpromise/fail.md @@ -1,6 +1,12 @@ -## `QPromise::fail` +--- +title: .fail +--- -``` +# QPromise::fail + +*Since: 0.1.0* + +```cpp QPromise::fail(Function onRejected) -> QPromise ``` diff --git a/docs/qtpromise/qpromise/filter.md b/docs/qtpromise/qpromise/filter.md index f350b28..a8d8577 100644 --- a/docs/qtpromise/qpromise/filter.md +++ b/docs/qtpromise/qpromise/filter.md @@ -1,6 +1,10 @@ -## `QPromise>::filter` +--- +title: .filter +--- -> **Important:** applies only to promise with sequence value. +# QPromise::filter + +*Since: 0.4.0* ```cpp QPromise>::filter(Filter filterer) -> QPromise> @@ -10,6 +14,10 @@ QPromise>::filter(Filter filterer) -> QPromise> // - Filterer: Function(T value, int index) -> bool ``` +::: warning IMPORTANT +This method only applies to promise with sequence value. +::: + Iterates over all the promise values (i.e. `Sequence`) and [filters the sequence](https://en.wikipedia.org/wiki/Filter_%28higher-order_function%29) to another using the given `filterer` function. If `filterer` returns `true`, a copy of the item is put in the `output` sequence, otherwise, the item will not appear in `output`. If `filterer` @@ -39,7 +47,9 @@ output.then([](const QList& res) { }); ``` -> **Note:** the order of the output sequence values is guarantee to be the same as the original +::: tip NOTE +The order of the output sequence values is guarantee to be the same as the original sequence, regardless of completion order of the promises returned by `filterer`. +::: See also: [`QtPromise::filter`](../helpers/filter.md) diff --git a/docs/qtpromise/qpromise/finally.md b/docs/qtpromise/qpromise/finally.md index 671c957..7a2e867 100644 --- a/docs/qtpromise/qpromise/finally.md +++ b/docs/qtpromise/qpromise/finally.md @@ -1,6 +1,12 @@ -## `QPromise::finally` +--- +title: .finally +--- -``` +# QPromise::finally + +*Since: 0.1.0* + +```cpp QPromise::finally(Function handler) -> QPromise ``` diff --git a/docs/qtpromise/qpromise/isfulfilled.md b/docs/qtpromise/qpromise/isfulfilled.md index 8b25e00..55a500a 100644 --- a/docs/qtpromise/qpromise/isfulfilled.md +++ b/docs/qtpromise/qpromise/isfulfilled.md @@ -1,6 +1,12 @@ -# `QPromise::isFulfilled` +--- +title: .isFulfilled +--- -``` +# QPromise::isFulfilled + +*Since: 0.1.0* + +```cpp QPromise::isFulfilled() -> bool ``` diff --git a/docs/qtpromise/qpromise/ispending.md b/docs/qtpromise/qpromise/ispending.md index 4fb5c15..4903db3 100644 --- a/docs/qtpromise/qpromise/ispending.md +++ b/docs/qtpromise/qpromise/ispending.md @@ -1,6 +1,12 @@ -# `QPromise::isPending` +--- +title: .isPending +--- -``` +# QPromise::isPending + +*Since: 0.1.0* + +```cpp QPromise::isPending() -> bool ``` diff --git a/docs/qtpromise/qpromise/isrejected.md b/docs/qtpromise/qpromise/isrejected.md index e982e51..c520058 100644 --- a/docs/qtpromise/qpromise/isrejected.md +++ b/docs/qtpromise/qpromise/isrejected.md @@ -1,6 +1,12 @@ -# `QPromise::isRejected` +--- +title: .isRejected +--- -``` +# QPromise::isRejected + +*Since: 0.1.0* + +```cpp QPromise::isRejected() -> bool ``` diff --git a/docs/qtpromise/qpromise/map.md b/docs/qtpromise/qpromise/map.md index 531dee7..35832b2 100644 --- a/docs/qtpromise/qpromise/map.md +++ b/docs/qtpromise/qpromise/map.md @@ -1,6 +1,10 @@ -## `QPromise>::map` +--- +title: .map +--- -> **Important:** applies only to promise with sequence value. +# QPromise::map + +*Since: 0.4.0* ```cpp QPromise>::map(Mapper mapper) -> QPromise> @@ -10,6 +14,10 @@ QPromise>::map(Mapper mapper) -> QPromise> // - Mapper: Function(T value, int index) -> R | QPromise ``` +::: warning IMPORTANT +This method only applies to promise with sequence value. +::: + Iterates over all the promise values (i.e. `Sequence`) and [maps the sequence](https://en.wikipedia.org/wiki/Map_%28higher-order_function%29) to another using the given `mapper` function. The type returned by `mapper` determines the type of the `output` promise. If `mapper` throws, `output` is rejected with the new exception. @@ -41,8 +49,10 @@ output.then([](const QVector& res) { }); ``` -> **Note:** the order of the output sequence values is guarantee to be the same as the original +::: tip NOTE +The order of the output sequence values is guarantee to be the same as the original sequence, regardless of completion order of the promises returned by `mapper`. +::: This function is provided for convenience and is similar to: diff --git a/docs/qtpromise/qpromise/reject.md b/docs/qtpromise/qpromise/reject.md index 3eb0e8f..93a57a3 100644 --- a/docs/qtpromise/qpromise/reject.md +++ b/docs/qtpromise/qpromise/reject.md @@ -1,6 +1,12 @@ -## `[static] QPromise::reject` +--- +title: ::reject [static] +--- -``` +# QPromise::reject [static] + +*Since: 0.1.0* + +```cpp [static] QPromise::reject(any reason) -> QPromise ``` diff --git a/docs/qtpromise/qpromise/resolve.md b/docs/qtpromise/qpromise/resolve.md index 3d49f7f..1ca85ef 100644 --- a/docs/qtpromise/qpromise/resolve.md +++ b/docs/qtpromise/qpromise/resolve.md @@ -1,4 +1,10 @@ -## `[static] QPromise::resolve` +--- +title: ::resolve [static] +--- + +# QPromise::resolve [static] + +*Since: 0.1.0* ``` [static] QPromise::resolve(T value) -> QPromise diff --git a/docs/qtpromise/qpromise/tap.md b/docs/qtpromise/qpromise/tap.md index fe93620..08e2f07 100644 --- a/docs/qtpromise/qpromise/tap.md +++ b/docs/qtpromise/qpromise/tap.md @@ -1,6 +1,12 @@ -## `QPromise::tap` +--- +title: .tap +--- -``` +# QPromise::tap + +*Since: 0.2.0* + +```cpp QPromise::tap(Function handler) -> QPromise ``` diff --git a/docs/qtpromise/qpromise/tapfail.md b/docs/qtpromise/qpromise/tapfail.md index e9b372e..ff88dc0 100644 --- a/docs/qtpromise/qpromise/tapfail.md +++ b/docs/qtpromise/qpromise/tapfail.md @@ -1,6 +1,12 @@ -## `QPromise::tapFail` +--- +title: .tapFail +--- -``` +# QPromise::tapFail + +*Since: 0.4.0* + +```cpp QPromise::tapFail(Function handler) -> QPromise ``` diff --git a/docs/qtpromise/qpromise/then.md b/docs/qtpromise/qpromise/then.md index be55e23..b55ad52 100644 --- a/docs/qtpromise/qpromise/then.md +++ b/docs/qtpromise/qpromise/then.md @@ -1,6 +1,12 @@ -## `QPromise::then` +--- +title: .then +--- -``` +# QPromise::then + +*Since: 0.1.0* + +```cpp QPromise::then(Function onFulfilled, Function onRejected) -> QPromise QPromise::then(Function onFulfilled) -> QPromise ``` @@ -17,9 +23,11 @@ auto output = input.then([](int res) { }); ``` -> **Note**: `onRejected` handler is optional, `output` will be rejected with the same reason as `input`. - -> **Note**: it's recommended to use the [`fail`](fail.md) shorthand to handle errors. +::: tip NOTE +`onRejected` handler is optional, in which case `output` will be rejected with +the same reason as `input`. Also note that it's recommended to use the +[`fail`](fail.md) shorthand to handle errors. +::: The type `` of the `output` promise depends on the return type of the `onFulfilled` handler: @@ -35,7 +43,11 @@ output.then([](const QString& res) { }); ``` -> **Note**: only `onFulfilled` can change the promise type, `onRejected` **must** return the same type as `onFulfilled`. That also means if `onFulfilled` is `nullptr`, `onRejected` must return the same type as the `input` promise. +::: tip NOTE +Only `onFulfilled` can change the promise type, `onRejected` **must** return the +same type as `onFulfilled`. That also means if `onFulfilled` is `nullptr`, +`onRejected` must return the same type as the `input` promise. +::: ```cpp QPromise input = ... diff --git a/docs/qtpromise/qpromise/timeout.md b/docs/qtpromise/qpromise/timeout.md index 8cb3278..3c6e00d 100644 --- a/docs/qtpromise/qpromise/timeout.md +++ b/docs/qtpromise/qpromise/timeout.md @@ -1,6 +1,12 @@ -## `QPromise::timeout` +--- +title: .timeout +--- -``` +# QPromise::timeout + +*Since: 0.2.0* + +```cpp QPromise::timeout(int msec, any error = QPromiseTimeoutException) -> QPromise ``` diff --git a/docs/qtpromise/qpromise/wait.md b/docs/qtpromise/qpromise/wait.md index f2307ac..db9b2c6 100644 --- a/docs/qtpromise/qpromise/wait.md +++ b/docs/qtpromise/qpromise/wait.md @@ -1,6 +1,12 @@ -## `QPromise::wait` +--- +title: .wait +--- -``` +# QPromise::wait + +*Since: 0.1.0* + +```cpp QPromise::wait() -> QPromise ``` diff --git a/docs/qtpromise/qtconcurrent.md b/docs/qtpromise/qtconcurrent.md index c894790..f8858fa 100644 --- a/docs/qtpromise/qtconcurrent.md +++ b/docs/qtpromise/qtconcurrent.md @@ -1,4 +1,4 @@ -## QtConcurrent +# QtConcurrent QtPromise integrates with [QtConcurrent](https://doc.qt.io/qt-5/qtconcurrent-index.html) to make easy chaining QFuture with QPromise. diff --git a/docs/qtpromise/thread-safety.md b/docs/qtpromise/thread-safety.md index b4eee3c..426f131 100644 --- a/docs/qtpromise/thread-safety.md +++ b/docs/qtpromise/thread-safety.md @@ -1,5 +1,7 @@ -## Thread-Safety +# Thread-Safety QPromise is thread-safe and can be copied and accessed across different threads. QPromise relies on [explicitly data sharing](https://doc.qt.io/qt-5/qexplicitlyshareddatapointer.html#details) and thus `auto p2 = p1` represents the same promise: when `p1` resolves, handlers registered on `p1` and `p2` are called, the fulfilled value being shared between both instances. -> **Note:** while it's safe to access the resolved value from different threads using [`then`](qpromise/then.md), QPromise provides no guarantee about the object being pointed to. Thread-safety and reentrancy rules for that object still apply. +::: warning IMPORTANT +While it's safe to access the resolved value from different threads using [`then`](qpromise/then.md), QPromise provides no guarantee about the object being pointed to. Thread-safety and reentrancy rules for that object still apply. +:::