Couchbase C++ SDK 1.4.0 (rev. 59aa900)
Loading...
Searching...
No Matches
get_result.hxx
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2/*
3 * Copyright 2020-Present Couchbase, Inc.
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18#pragma once
19
21#include <couchbase/result.hxx>
22
23#include <chrono>
24#include <cinttypes>
25#include <memory>
26#include <optional>
27#include <vector>
28
29namespace couchbase
30{
31#ifndef COUCHBASE_CXX_CLIENT_DOXYGEN
32namespace crypto
33{
34class manager;
35} // namespace crypto
36#endif
37
44class get_result : public result
45{
46public:
51 get_result() = default;
52
66 std::optional<std::chrono::system_clock::time_point> expiry_time,
67 std::shared_ptr<crypto::manager> crypto_manager = {})
68 : result{ cas }
69 , value_{ std::move(value) }
70 , expiry_time_{ expiry_time }
71 , crypto_manager_{ std::move(crypto_manager) }
72 {
73 }
74
86 template<typename Document,
87 typename Transcoder = codec::default_json_transcoder,
88 std::enable_if_t<!codec::is_transcoder_v<Document>, bool> = true,
89 std::enable_if_t<codec::is_transcoder_v<Transcoder>, bool> = true>
90 [[nodiscard]] auto content_as() const -> Document
91 {
93 return Transcoder::template decode<Document>(value_, crypto_manager_);
94 } else {
95 return Transcoder::template decode<Document>(value_);
96 }
97 }
98
116 template<typename Transcoder, std::enable_if_t<codec::is_transcoder_v<Transcoder>, bool> = true>
117 [[nodiscard]] auto content_as() const -> typename Transcoder::document_type
118 {
120 return Transcoder::decode(value_, crypto_manager_);
121 } else {
122 return Transcoder::decode(value_);
123 }
124 }
125
139 [[nodiscard]] auto expiry_time() const
140 -> const std::optional<std::chrono::system_clock::time_point>&
141 {
142 return expiry_time_;
143 }
144
145private:
146 codec::encoded_value value_{};
147 std::optional<std::chrono::system_clock::time_point> expiry_time_{};
148 std::shared_ptr<crypto::manager> crypto_manager_{};
149};
150
151} // namespace couchbase
CAS is a special type that represented in protocol using unsigned 64-bit integer, but only equality c...
Definition cas.hxx:34
auto content_as() const -> typename Transcoder::document_type
Decodes content of the document using given codec.
Definition get_result.hxx:117
get_result(couchbase::cas cas, codec::encoded_value value, std::optional< std::chrono::system_clock::time_point > expiry_time, std::shared_ptr< crypto::manager > crypto_manager={})
Constructs result for get operation.
Definition get_result.hxx:64
auto content_as() const -> Document
Decodes content of the document using given codec.
Definition get_result.hxx:90
auto expiry_time() const -> const std::optional< std::chrono::system_clock::time_point > &
If the document has an expiry, returns the point in time when the loaded document expires.
Definition get_result.hxx:139
Base class for operations of data service.
Definition result.hxx:35
auto cas() const -> couchbase::cas
Definition result.hxx:73
constexpr bool is_crypto_transcoder_v
Definition transcoder_traits.hxx:36
json_transcoder< tao_json_serializer > default_json_transcoder
Definition default_json_transcoder.hxx:28
Definition internal.hxx:27
Represents a single item from the result of scan().
Definition allow_querying_search_index_options.hxx:28
Definition encoded_value.hxx:27