s3.h
1 // Copyright 2020, Beeri 15. All rights reserved.
2 // Author: Roman Gershman (romange@gmail.com)
3 //
4 
5 #include <functional>
6 #include "file/file.h"
7 #include "util/status.h"
8 
9 #pragma once
10 
11 namespace util {
12 
13 namespace http {
14 
15 class HttpsClient;
16 class HttpsClientPool;
17 
18 } // namespace http
19 
20 class AWS;
21 
22 class S3Bucket {
23  public:
25 
26  static const char* kRootDomain;
27 
29  using ListObjectCb = std::function<void(size_t, absl::string_view)>;
30 
33  S3Bucket(const AWS& aws, http::HttpsClientPool* pool);
34 
43  ListObjectResult List(absl::string_view glob, bool fs_mode, ListObjectCb cb);
44 
45  static bool SplitToBucketPath(absl::string_view input, absl::string_view* bucket,
46  absl::string_view* path);
47 
48  static std::string ToFullPath(absl::string_view bucket, absl::string_view key_path);
49 
50  private:
51  const AWS& aws_;
52  http::HttpsClientPool* pool_;
53 };
54 
56 
58 ListS3BucketResult ListS3Buckets(const AWS& aws, http::HttpsClientPool* pool);
59 
71  absl::string_view key_path, const AWS& aws, http::HttpsClientPool* pool,
72  const file::ReadonlyFile::Options& opts = file::ReadonlyFile::Options{});
73 
86 StatusObject<file::WriteFile*> OpenS3WriteFile(
87  absl::string_view key_path, const AWS& aws, http::HttpsClientPool* pool);
88 
89 
90 bool IsS3Path(absl::string_view path);
91 
92 namespace detail {
93 
94 std::vector<std::string> ParseXmlListBuckets(absl::string_view xml_obj);
95 void ParseXmlListObj(absl::string_view xml_obj, S3Bucket::ListObjectCb cb);
96 
97 } // namespace detail
98 
99 } // namespace util
std::function< void(size_t, absl::string_view)> ListObjectCb
Called with (size, key_name) pairs.
Definition: s3.h:29
ListObjectResult List(absl::string_view glob, bool fs_mode, ListObjectCb cb)
Lists objects for a particular bucket.
Definition: s3.cc:565
Definition: aws.h:18
S3Bucket(const AWS &aws, http::HttpsClientPool *pool)
Definition: s3.cc:562