1 /*
2  * Copyright (c) 2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef OHOS_DISTRIBUTED_DATA_SERVICES_EXTENSION_EXTENSION_UTIL_H
17 #define OHOS_DISTRIBUTED_DATA_SERVICES_EXTENSION_EXTENSION_UTIL_H
18 
19 #include "basic_rust_types.h"
20 #include "cloud_ext_types.h"
21 #include "cloud_extension.h"
22 #include "cloud/cloud_info.h"
23 #include "cloud/schema_meta.h"
24 #include "error.h"
25 #include "error/general_error.h"
26 #include "store/general_value.h"
27 
28 namespace OHOS::CloudData {
29 using DBMeta = DistributedData::Database;
30 using DBTable = DistributedData::Table;
31 using DBErr = DistributedData::GeneralError;
32 using DBValue = DistributedData::Value;
33 using DBBytes = DistributedData::Bytes;
34 using DBAsset = DistributedData::Asset;
35 using DBAssets = DistributedData::Assets;
36 using DBAssetStatus = DBAsset::Status;
37 using DBInfo = DistributedData::CloudInfo::AppInfo;
38 using DBVBucket = DistributedData::VBucket;
39 using DBVBuckets = DistributedData::VBuckets;
40 class ExtensionUtil final {
41 public:
42     template<class T>
43     inline static constexpr auto TYPE_INDEX = DistributedData::TYPE_INDEX<T>;
44     static DBVBuckets ConvertBuckets(OhCloudExtVector *values);
45     static DBVBucket ConvertBucket(OhCloudExtHashMap *value);
46     static DBInfo ConvertAppInfo(OhCloudExtAppInfo *appInfo);
47     static DBAsset ConvertAsset(OhCloudExtCloudAsset *asset);
48     static DBValue ConvertValue(OhCloudExtValue *value);
49     static DBValue ConvertValues(OhCloudExtValueBucket *bucket, const std::string &key);
50     static DBErr ConvertStatus(int status);
51     static DBAssets ConvertAssets(OhCloudExtVector *values);
52 
53     static std::pair<OhCloudExtHashMap *, size_t> Convert(const DBVBucket &bucket);
54     static std::pair<OhCloudExtVector *, size_t> Convert(DBVBuckets &&buckets);
55     static std::pair<OhCloudExtDatabase *, size_t> Convert(const DBMeta &dbMeta);
56     static std::pair<OhCloudExtValue *, size_t> Convert(const DBValue &dbValue);
57     static std::pair<OhCloudExtCloudAsset *, size_t> Convert(const DBAsset &dbAsset);
58     static std::pair<OhCloudExtVector *, size_t> Convert(const DBAssets &dbAssets);
59     static std::pair<OhCloudExtVector *, size_t> Convert(const DBTable &dbTable);
60     static OhCloudExtAssetStatus ConvertAssetStatus(DBAssetStatus status);
61 
62 private:
63     static void ConvertAssetLeft(OhCloudExtCloudAsset *asset, DBAsset &dbAsset);
64     static void DoConvertValue(void *content, unsigned int ctLen, OhCloudExtValueType type, DBValue &dbvalue);
65 };
66 } // namespace OHOS::CloudData
67 #endif // OHOS_DISTRIBUTED_DATA_SERVICES_EXTENSION_EXTENSION_UTIL_H
68