Apache OpenDALâ„¢ C++ Binding
The C++ binding for Apache OpenDALâ„¢
Loading...
Searching...
No Matches
data_structure.hpp
Go to the documentation of this file.
1/*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 */
19
20#pragma once
21
22#include <chrono>
23#include <cstddef>
24#include <cstdint>
25#include <optional>
26#include <string>
27#include <unordered_map>
28
29namespace opendal {
30
35enum class EntryMode : int {
36 FILE = 1,
37 DIR = 2,
38 UNKNOWN = 0,
39};
40
51class Metadata {
52 public:
53 // Basic file information
55 std::uint64_t content_length{0};
56
57 // HTTP-style headers
58 std::optional<std::string>
60 std::optional<std::string>
63 std::optional<std::string>
65 std::optional<std::string>
67 std::optional<std::string>
69 std::optional<std::string> etag;
70 std::optional<std::chrono::system_clock::time_point>
72
73 // Versioning information
74 std::optional<std::string>
76 std::optional<bool> is_current;
77 bool is_deleted{false};
78
79 // Default constructor
80 Metadata() = default;
81
82 // Destructor
83 ~Metadata() = default;
84
85 // Accessor methods
86
91 EntryMode Mode() const { return type; }
92
97 bool IsFile() const { return type == EntryMode::FILE; }
98
103 bool IsDir() const { return type == EntryMode::DIR; }
104
109 std::uint64_t ContentLength() const { return content_length; }
110
115 const std::optional<std::string>& CacheControl() const {
116 return cache_control;
117 }
118
123 const std::optional<std::string>& ContentDisposition() const {
124 return content_disposition;
125 }
126
131 const std::optional<std::string>& ContentMd5() const {
132 return content_md5;
133 }
134
139 const std::optional<std::string>& ContentType() const {
140 return content_type;
141 }
142
147 const std::optional<std::string>& ContentEncoding() const {
148 return content_encoding;
149 }
150
155 const std::optional<std::string>& Etag() const { return etag; }
156
161 const std::optional<std::chrono::system_clock::time_point>& LastModified()
162 const {
163 return last_modified;
164 }
165
170 const std::optional<std::string>& Version() const { return version; }
171
177 const std::optional<bool>& IsCurrent() const { return is_current; }
178
183 bool IsDeleted() const { return is_deleted; }
184};
185
190class Entry {
191 public:
192 std::string path;
193};
194
199struct ReadRange {
200 enum class Type : std::uint8_t {
201 FULL = 0,
202 OFFSET = 1,
203 RANGE = 2,
204 SUFFIX = 3,
205 };
206
208 std::uint64_t start{0};
209 std::uint64_t end{0};
210
211 static ReadRange Full() { return {}; }
212
213 static ReadRange Offset(std::uint64_t offset) {
214 return {Type::OFFSET, offset, 0};
215 }
216
217 static ReadRange Range(std::uint64_t start, std::uint64_t end) {
218 return {Type::RANGE, start, end};
219 }
220
221 static ReadRange Suffix(std::uint64_t size) {
222 return {Type::SUFFIX, 0, size};
223 }
224};
225
231 std::optional<std::string> version;
232 std::optional<std::string> if_match;
233 std::optional<std::string> if_none_match;
234 std::optional<std::chrono::system_clock::time_point> if_modified_since;
235 std::optional<std::chrono::system_clock::time_point> if_unmodified_since;
236 std::optional<std::string> override_content_type;
237 std::optional<std::string> override_cache_control;
238 std::optional<std::string> override_content_disposition;
239};
240
247 std::optional<std::string> version;
248 std::optional<std::string> if_match;
249 std::optional<std::string> if_none_match;
250 std::optional<std::chrono::system_clock::time_point> if_modified_since;
251 std::optional<std::chrono::system_clock::time_point> if_unmodified_since;
252 std::optional<std::uint64_t> content_length_hint;
253 std::size_t concurrent{0};
254 std::optional<std::size_t> chunk;
255 std::optional<std::size_t> gap;
256 std::optional<std::string> override_content_type;
257 std::optional<std::string> override_cache_control;
258 std::optional<std::string> override_content_disposition;
259};
260
266 std::optional<std::string> version;
267 std::optional<std::string> if_match;
268 std::optional<std::string> if_none_match;
269 std::optional<std::chrono::system_clock::time_point> if_modified_since;
270 std::optional<std::chrono::system_clock::time_point> if_unmodified_since;
271 std::optional<std::uint64_t> content_length_hint;
272 std::size_t concurrent{0};
273 std::optional<std::size_t> chunk;
274 std::optional<std::size_t> gap;
275 std::size_t prefetch{0};
276};
277
283 bool append{false};
284 std::optional<std::string> cache_control;
285 std::optional<std::string> content_type;
286 std::optional<std::string> content_disposition;
287 std::optional<std::string> content_encoding;
288 std::optional<std::unordered_map<std::string, std::string>> user_metadata;
289 std::optional<std::string> if_match;
290 std::optional<std::string> if_none_match;
291 bool if_not_exists{false};
292 std::size_t concurrent{0};
293 std::optional<std::size_t> chunk;
294};
295
301 bool if_not_exists{false};
302 std::optional<std::string> if_match;
303 std::optional<std::string> source_version;
304 std::optional<std::uint64_t> source_content_length_hint;
305 std::size_t concurrent{0};
306 std::optional<std::size_t> chunk;
307};
308
314 bool if_not_exists{false};
315};
316
322 std::optional<std::string> version;
323 bool recursive{false};
324};
325
331 std::optional<std::size_t> limit;
332 std::optional<std::string> start_after;
333 bool recursive{false};
334 bool versions{false};
335 bool deleted{false};
336};
337
338} // namespace opendal
339namespace opendal {
375}
Definition data_structure.hpp:340
size_t write_total_max_size
Definition data_structure.hpp:360
bool write_can_multi
Definition data_structure.hpp:352
bool write
Definition data_structure.hpp:351
bool presign_write
Definition data_structure.hpp:372
bool list_with_recursive
Definition data_structure.hpp:368
bool read
Definition data_structure.hpp:345
bool stat
Definition data_structure.hpp:342
bool read_with_if_match
Definition data_structure.hpp:346
bool stat_with_if_none_match
Definition data_structure.hpp:344
bool read_with_if_none_match
Definition data_structure.hpp:347
bool list_with_start_after
Definition data_structure.hpp:367
bool presign
Definition data_structure.hpp:369
bool copy
Definition data_structure.hpp:363
bool create_dir
Definition data_structure.hpp:361
bool list_with_limit
Definition data_structure.hpp:366
bool read_with_override_cache_control
Definition data_structure.hpp:348
size_t write_multi_max_size
Definition data_structure.hpp:358
bool presign_stat
Definition data_structure.hpp:371
bool rename
Definition data_structure.hpp:364
size_t write_multi_min_size
Definition data_structure.hpp:359
bool write_can_append
Definition data_structure.hpp:354
bool write_with_cache_control
Definition data_structure.hpp:357
bool stat_with_if_match
Definition data_structure.hpp:343
bool write_can_empty
Definition data_structure.hpp:353
bool delete_feature
Definition data_structure.hpp:362
bool list
Definition data_structure.hpp:365
bool shared
Definition data_structure.hpp:373
bool presign_read
Definition data_structure.hpp:370
bool write_with_content_disposition
Definition data_structure.hpp:356
bool write_with_content_type
Definition data_structure.hpp:355
bool read_with_override_content_disposition
Definition data_structure.hpp:349
bool read_with_override_content_type
Definition data_structure.hpp:350
The entry of a file or directory.
Definition data_structure.hpp:190
std::string path
Definition data_structure.hpp:192
The metadata of a file or directory.
Definition data_structure.hpp:51
std::optional< std::string > content_disposition
Definition data_structure.hpp:61
const std::optional< std::string > & CacheControl() const
Cache control directive.
Definition data_structure.hpp:115
EntryMode type
Definition data_structure.hpp:54
std::optional< std::chrono::system_clock::time_point > last_modified
Last-Modified timestamp.
Definition data_structure.hpp:71
const std::optional< std::string > & ContentDisposition() const
Content disposition.
Definition data_structure.hpp:123
std::optional< std::string > etag
ETag header as defined by RFC 7232.
Definition data_structure.hpp:69
std::optional< std::string > cache_control
Cache-Control header as defined by RFC 7234.
Definition data_structure.hpp:59
const std::optional< bool > & IsCurrent() const
Check if this is the current version.
Definition data_structure.hpp:177
bool IsDeleted() const
Check if this entry has been deleted.
Definition data_structure.hpp:183
std::optional< std::string > content_type
Content-Type header as defined by RFC 9110.
Definition data_structure.hpp:66
Metadata()=default
~Metadata()=default
EntryMode Mode() const
Get the entry mode (file type)
Definition data_structure.hpp:91
bool IsDir() const
Check if this metadata represents a directory.
Definition data_structure.hpp:103
std::optional< std::string > version
Version identifier (e.g., S3 version ID)
Definition data_structure.hpp:75
const std::optional< std::string > & ContentType() const
Content type (MIME type)
Definition data_structure.hpp:139
std::optional< std::string > content_encoding
Content-Encoding header as defined by RFC 7231.
Definition data_structure.hpp:68
const std::optional< std::string > & ContentEncoding() const
Content encoding.
Definition data_structure.hpp:147
const std::optional< std::string > & ContentMd5() const
Content MD5 hash.
Definition data_structure.hpp:131
std::uint64_t content_length
Definition data_structure.hpp:55
std::optional< bool > is_current
Whether this is the current version.
Definition data_structure.hpp:76
const std::optional< std::string > & Version() const
Version identifier.
Definition data_structure.hpp:170
std::optional< std::string > content_md5
Content-MD5 hash (deprecated but widely used)
Definition data_structure.hpp:64
std::uint64_t ContentLength() const
Content length in bytes.
Definition data_structure.hpp:109
const std::optional< std::chrono::system_clock::time_point > & LastModified() const
Last modified timestamp.
Definition data_structure.hpp:161
const std::optional< std::string > & Etag() const
ETag.
Definition data_structure.hpp:155
bool is_deleted
Whether this entry has been marked as deleted.
Definition data_structure.hpp:77
bool IsFile() const
Check if this metadata represents a file.
Definition data_structure.hpp:97
Definition data_structure.hpp:29
EntryMode
The mode of the entry.
Definition data_structure.hpp:35
Options for copy operations.
Definition data_structure.hpp:300
std::optional< std::size_t > chunk
Definition data_structure.hpp:306
std::size_t concurrent
Definition data_structure.hpp:305
bool if_not_exists
Definition data_structure.hpp:301
std::optional< std::string > source_version
Definition data_structure.hpp:303
std::optional< std::uint64_t > source_content_length_hint
Definition data_structure.hpp:304
std::optional< std::string > if_match
Definition data_structure.hpp:302
Options for delete operations.
Definition data_structure.hpp:321
bool recursive
Definition data_structure.hpp:323
std::optional< std::string > version
Definition data_structure.hpp:322
Options for list and lister operations.
Definition data_structure.hpp:330
bool versions
Definition data_structure.hpp:334
std::optional< std::string > start_after
Definition data_structure.hpp:332
std::optional< std::size_t > limit
Definition data_structure.hpp:331
bool deleted
Definition data_structure.hpp:335
bool recursive
Definition data_structure.hpp:333
Options for read operations.
Definition data_structure.hpp:245
std::optional< std::string > override_content_type
Definition data_structure.hpp:256
std::size_t concurrent
Definition data_structure.hpp:253
std::optional< std::size_t > gap
Definition data_structure.hpp:255
std::optional< std::string > override_content_disposition
Definition data_structure.hpp:258
std::optional< std::uint64_t > content_length_hint
Definition data_structure.hpp:252
std::optional< std::string > version
Definition data_structure.hpp:247
std::optional< std::size_t > chunk
Definition data_structure.hpp:254
std::optional< std::chrono::system_clock::time_point > if_unmodified_since
Definition data_structure.hpp:251
std::optional< std::string > if_none_match
Definition data_structure.hpp:249
std::optional< std::chrono::system_clock::time_point > if_modified_since
Definition data_structure.hpp:250
std::optional< std::string > override_cache_control
Definition data_structure.hpp:257
std::optional< std::string > if_match
Definition data_structure.hpp:248
ReadRange range
Definition data_structure.hpp:246
Byte range used by read operations.
Definition data_structure.hpp:199
std::uint64_t end
Definition data_structure.hpp:209
Type type
Definition data_structure.hpp:207
std::uint64_t start
Definition data_structure.hpp:208
Type
Definition data_structure.hpp:200
static ReadRange Suffix(std::uint64_t size)
Definition data_structure.hpp:221
static ReadRange Offset(std::uint64_t offset)
Definition data_structure.hpp:213
static ReadRange Full()
Definition data_structure.hpp:211
static ReadRange Range(std::uint64_t start, std::uint64_t end)
Definition data_structure.hpp:217
Options for creating readers.
Definition data_structure.hpp:265
std::optional< std::uint64_t > content_length_hint
Definition data_structure.hpp:271
std::optional< std::string > version
Definition data_structure.hpp:266
std::optional< std::string > if_match
Definition data_structure.hpp:267
std::size_t concurrent
Definition data_structure.hpp:272
std::size_t prefetch
Definition data_structure.hpp:275
std::optional< std::chrono::system_clock::time_point > if_unmodified_since
Definition data_structure.hpp:270
std::optional< std::size_t > chunk
Definition data_structure.hpp:273
std::optional< std::chrono::system_clock::time_point > if_modified_since
Definition data_structure.hpp:269
std::optional< std::size_t > gap
Definition data_structure.hpp:274
std::optional< std::string > if_none_match
Definition data_structure.hpp:268
Options for rename operations.
Definition data_structure.hpp:313
bool if_not_exists
Definition data_structure.hpp:314
Options for stat operations.
Definition data_structure.hpp:230
std::optional< std::string > override_cache_control
Definition data_structure.hpp:237
std::optional< std::string > override_content_disposition
Definition data_structure.hpp:238
std::optional< std::string > version
Definition data_structure.hpp:231
std::optional< std::string > if_none_match
Definition data_structure.hpp:233
std::optional< std::chrono::system_clock::time_point > if_modified_since
Definition data_structure.hpp:234
std::optional< std::chrono::system_clock::time_point > if_unmodified_since
Definition data_structure.hpp:235
std::optional< std::string > override_content_type
Definition data_structure.hpp:236
std::optional< std::string > if_match
Definition data_structure.hpp:232
Options for write and writer operations.
Definition data_structure.hpp:282
std::optional< std::string > cache_control
Definition data_structure.hpp:284
bool if_not_exists
Definition data_structure.hpp:291
std::optional< std::size_t > chunk
Definition data_structure.hpp:293
std::optional< std::string > content_type
Definition data_structure.hpp:285
std::optional< std::string > if_match
Definition data_structure.hpp:289
std::optional< std::string > if_none_match
Definition data_structure.hpp:290
std::optional< std::string > content_encoding
Definition data_structure.hpp:287
bool append
Definition data_structure.hpp:283
std::optional< std::unordered_map< std::string, std::string > > user_metadata
Definition data_structure.hpp:288
std::optional< std::string > content_disposition
Definition data_structure.hpp:286
std::size_t concurrent
Definition data_structure.hpp:292