1686862fbSopenharmony_ci/*
2686862fbSopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd.
3686862fbSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4686862fbSopenharmony_ci * you may not use this file except in compliance with the License.
5686862fbSopenharmony_ci * You may obtain a copy of the License at
6686862fbSopenharmony_ci *
7686862fbSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8686862fbSopenharmony_ci *
9686862fbSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10686862fbSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11686862fbSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12686862fbSopenharmony_ci * See the License for the specific language governing permissions and
13686862fbSopenharmony_ci * limitations under the License.
14686862fbSopenharmony_ci */
15686862fbSopenharmony_ci
16686862fbSopenharmony_ci#include "mission/distributed_bundle_info.h"
17686862fbSopenharmony_ci
18686862fbSopenharmony_ci#include "mission/json_util.h"
19686862fbSopenharmony_ci#include "nlohmann/json.hpp"
20686862fbSopenharmony_ci#include "parcel_helper.h"
21686862fbSopenharmony_ci#include "parcel_macro.h"
22686862fbSopenharmony_ci#include "string_ex.h"
23686862fbSopenharmony_ci
24686862fbSopenharmony_cinamespace OHOS {
25686862fbSopenharmony_cinamespace DistributedSchedule {
26686862fbSopenharmony_cinamespace {
27686862fbSopenharmony_ciconst std::string TAG = "dmsBundleInfo";
28686862fbSopenharmony_ciconst std::string JSON_KEY_VERSION = "version";
29686862fbSopenharmony_ciconst std::string JSON_KEY_VERSION_CODE = "versionCode";
30686862fbSopenharmony_ciconst std::string JSON_KEY_COMPATIBLE_VERSION_CODE = "compatibleVersionCode";
31686862fbSopenharmony_ciconst std::string JSON_KEY_VERSION_NAME = "versionName";
32686862fbSopenharmony_ciconst std::string JSON_KEY_MIN_COMPATIBLE_VERSION = "minCompatibleVersion";
33686862fbSopenharmony_ciconst std::string JSON_KEY_TARGET_VERSION_CODE = "targetVersionCode";
34686862fbSopenharmony_ciconst std::string JSON_KEY_APP_ID = "appId";
35686862fbSopenharmony_ciconst std::string JSON_KEY_ENABLED = "enabled";
36686862fbSopenharmony_ciconst std::string JSON_KEY_BUNDLE_NAME_ID = "bundleNameId";
37686862fbSopenharmony_ciconst std::string JSON_KEY_UPDATE_TIME = "updateTime";
38686862fbSopenharmony_ciconst std::string JSON_KEY_DEVELOPER_ID = "developerId";
39686862fbSopenharmony_ciconst std::string JSON_KEY_DMS_ABILITY_INFOS = "dmsAbilityInfos";
40686862fbSopenharmony_ciconst std::string JSON_KEY_DMS_ABILITY_NAME = "abilityName";
41686862fbSopenharmony_ciconst std::string JSON_KEY_DMS_CONTINUETYPE = "continueType";
42686862fbSopenharmony_ciconst std::string JSON_KEY_DMS_CONTINUETYPEID = "continueTypeId";
43686862fbSopenharmony_ciconst std::string JSON_KEY_DMS_USERID = "userIdArr";
44686862fbSopenharmony_ciconst std::string JSON_KEY_DMS_MODULENAME = "moduleName";
45686862fbSopenharmony_ciconst std::string JSON_KEY_DMS_MAX_BUNDLENAME_ID = "maxBundleNameId";
46686862fbSopenharmony_ci}
47686862fbSopenharmony_ci
48686862fbSopenharmony_cibool PublicRecordsInfo::ReadFromParcel(Parcel &parcel)
49686862fbSopenharmony_ci{
50686862fbSopenharmony_ci    maxBundleNameId = parcel.ReadUint16();
51686862fbSopenharmony_ci    return true;
52686862fbSopenharmony_ci}
53686862fbSopenharmony_ci
54686862fbSopenharmony_cibool PublicRecordsInfo::Marshalling(Parcel &parcel) const
55686862fbSopenharmony_ci{
56686862fbSopenharmony_ci    parcel.WriteUint16(maxBundleNameId);
57686862fbSopenharmony_ci    return true;
58686862fbSopenharmony_ci}
59686862fbSopenharmony_ci
60686862fbSopenharmony_ciPublicRecordsInfo *PublicRecordsInfo::Unmarshalling(Parcel &parcel)
61686862fbSopenharmony_ci{
62686862fbSopenharmony_ci    PublicRecordsInfo *info = new (std::nothrow) PublicRecordsInfo();
63686862fbSopenharmony_ci    if (info != nullptr && !info->ReadFromParcel(parcel)) {
64686862fbSopenharmony_ci        APP_LOGW("read from parcel failed");
65686862fbSopenharmony_ci        delete info;
66686862fbSopenharmony_ci        info = nullptr;
67686862fbSopenharmony_ci    }
68686862fbSopenharmony_ci    return info;
69686862fbSopenharmony_ci}
70686862fbSopenharmony_ci
71686862fbSopenharmony_cistd::string PublicRecordsInfo::ToString() const
72686862fbSopenharmony_ci{
73686862fbSopenharmony_ci    nlohmann::json jsonObject;
74686862fbSopenharmony_ci    jsonObject[JSON_KEY_DMS_MAX_BUNDLENAME_ID] = maxBundleNameId;
75686862fbSopenharmony_ci    return jsonObject.dump();
76686862fbSopenharmony_ci}
77686862fbSopenharmony_ci
78686862fbSopenharmony_civoid to_json(nlohmann::json &jsonObject, const PublicRecordsInfo &publicRecordsInfo)
79686862fbSopenharmony_ci{
80686862fbSopenharmony_ci    APP_LOGI("call");
81686862fbSopenharmony_ci    jsonObject = nlohmann::json {
82686862fbSopenharmony_ci        {JSON_KEY_DMS_MAX_BUNDLENAME_ID, publicRecordsInfo.maxBundleNameId},
83686862fbSopenharmony_ci    };
84686862fbSopenharmony_ci    APP_LOGI("end");
85686862fbSopenharmony_ci}
86686862fbSopenharmony_ci
87686862fbSopenharmony_civoid from_json(const nlohmann::json &jsonObject, PublicRecordsInfo &publicRecordsInfo)
88686862fbSopenharmony_ci{
89686862fbSopenharmony_ci    APP_LOGI("call");
90686862fbSopenharmony_ci    const auto &jsonObjectEnd = jsonObject.end();
91686862fbSopenharmony_ci    int32_t parseResult = ERR_OK;
92686862fbSopenharmony_ci    GetValueIfFindKey<uint16_t>(jsonObject,
93686862fbSopenharmony_ci        jsonObjectEnd,
94686862fbSopenharmony_ci        JSON_KEY_DMS_CONTINUETYPEID,
95686862fbSopenharmony_ci        publicRecordsInfo.maxBundleNameId,
96686862fbSopenharmony_ci        JsonType::NUMBER,
97686862fbSopenharmony_ci        false,
98686862fbSopenharmony_ci        parseResult,
99686862fbSopenharmony_ci        ArrayType::NOT_ARRAY);
100686862fbSopenharmony_ci    if (parseResult != ERR_OK) {
101686862fbSopenharmony_ci        APP_LOGE("read PublicRecordsInfo from jsonObject error, error code : %{public}d", parseResult);
102686862fbSopenharmony_ci    }
103686862fbSopenharmony_ci    APP_LOGI("end");
104686862fbSopenharmony_ci}
105686862fbSopenharmony_ci
106686862fbSopenharmony_cibool PublicRecordsInfo::FromJsonString(const std::string &jsonString)
107686862fbSopenharmony_ci{
108686862fbSopenharmony_ci    nlohmann::json jsonObject = nlohmann::json::parse(jsonString, nullptr, false);
109686862fbSopenharmony_ci    if (jsonObject.is_discarded()) {
110686862fbSopenharmony_ci        return false;
111686862fbSopenharmony_ci    }
112686862fbSopenharmony_ci    const auto &jsonObjectEnd = jsonObject.end();
113686862fbSopenharmony_ci    int32_t parseResult = ERR_OK;
114686862fbSopenharmony_ci    GetValueIfFindKey<uint16_t>(jsonObject, jsonObjectEnd, JSON_KEY_DMS_MAX_BUNDLENAME_ID, maxBundleNameId,
115686862fbSopenharmony_ci        JsonType::NUMBER, false, parseResult, ArrayType::NOT_ARRAY);
116686862fbSopenharmony_ci    return parseResult == ERR_OK;
117686862fbSopenharmony_ci}
118686862fbSopenharmony_ci
119686862fbSopenharmony_cibool DmsAbilityInfo::ReadFromParcel(Parcel &parcel)
120686862fbSopenharmony_ci{
121686862fbSopenharmony_ci    abilityName = Str16ToStr8(parcel.ReadString16());
122686862fbSopenharmony_ci
123686862fbSopenharmony_ci    int32_t continueTypeSize;
124686862fbSopenharmony_ci    READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, continueTypeSize);
125686862fbSopenharmony_ci    CONTAINER_SECURITY_VERIFY(parcel, continueTypeSize, &continueType);
126686862fbSopenharmony_ci    for (auto i = 0; i < continueTypeSize; i++) {
127686862fbSopenharmony_ci        continueType.emplace_back(Str16ToStr8(parcel.ReadString16()));
128686862fbSopenharmony_ci    }
129686862fbSopenharmony_ci
130686862fbSopenharmony_ci    int32_t continueTypeIdSize;
131686862fbSopenharmony_ci    READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, continueTypeIdSize);
132686862fbSopenharmony_ci    CONTAINER_SECURITY_VERIFY(parcel, continueTypeIdSize, &continueTypeId);
133686862fbSopenharmony_ci    for (auto i = 0; i < continueTypeIdSize; i++) {
134686862fbSopenharmony_ci        continueTypeId.emplace_back(parcel.ReadUint8());
135686862fbSopenharmony_ci    }
136686862fbSopenharmony_ci    moduleName = Str16ToStr8(parcel.ReadString16());
137686862fbSopenharmony_ci    return true;
138686862fbSopenharmony_ci}
139686862fbSopenharmony_ci
140686862fbSopenharmony_cibool DmsAbilityInfo::Marshalling(Parcel &parcel) const
141686862fbSopenharmony_ci{
142686862fbSopenharmony_ci    parcel.WriteString16(Str8ToStr16(abilityName));
143686862fbSopenharmony_ci    for (auto &ele : continueType) {
144686862fbSopenharmony_ci        parcel.WriteString16(Str8ToStr16(ele));
145686862fbSopenharmony_ci    }
146686862fbSopenharmony_ci    for (auto &ele : continueTypeId) {
147686862fbSopenharmony_ci        parcel.WriteUint8(ele);
148686862fbSopenharmony_ci    }
149686862fbSopenharmony_ci    parcel.WriteString16(Str8ToStr16(moduleName));
150686862fbSopenharmony_ci    return true;
151686862fbSopenharmony_ci}
152686862fbSopenharmony_ci
153686862fbSopenharmony_ciDmsAbilityInfo *DmsAbilityInfo::Unmarshalling(Parcel &parcel)
154686862fbSopenharmony_ci{
155686862fbSopenharmony_ci    DmsAbilityInfo *info = new (std::nothrow) DmsAbilityInfo();
156686862fbSopenharmony_ci    if (info != nullptr && !info->ReadFromParcel(parcel)) {
157686862fbSopenharmony_ci        APP_LOGW("read from parcel failed");
158686862fbSopenharmony_ci        delete info;
159686862fbSopenharmony_ci        info = nullptr;
160686862fbSopenharmony_ci    }
161686862fbSopenharmony_ci    return info;
162686862fbSopenharmony_ci}
163686862fbSopenharmony_ci
164686862fbSopenharmony_civoid to_json(nlohmann::json &jsonObject, const DmsAbilityInfo &dmsAbilityInfo)
165686862fbSopenharmony_ci{
166686862fbSopenharmony_ci    jsonObject = nlohmann::json {
167686862fbSopenharmony_ci        {JSON_KEY_DMS_ABILITY_NAME, dmsAbilityInfo.abilityName},
168686862fbSopenharmony_ci        {JSON_KEY_DMS_CONTINUETYPE, dmsAbilityInfo.continueType},
169686862fbSopenharmony_ci         {JSON_KEY_DMS_CONTINUETYPEID, dmsAbilityInfo.continueTypeId},
170686862fbSopenharmony_ci        {JSON_KEY_DMS_MODULENAME, dmsAbilityInfo.moduleName}
171686862fbSopenharmony_ci    };
172686862fbSopenharmony_ci}
173686862fbSopenharmony_ci
174686862fbSopenharmony_civoid from_json(const nlohmann::json &jsonObject, DmsAbilityInfo &dmsAbilityInfo)
175686862fbSopenharmony_ci{
176686862fbSopenharmony_ci    const auto &jsonObjectEnd = jsonObject.end();
177686862fbSopenharmony_ci    int32_t parseResult = ERR_OK;
178686862fbSopenharmony_ci    GetValueIfFindKey<std::string>(jsonObject,
179686862fbSopenharmony_ci        jsonObjectEnd,
180686862fbSopenharmony_ci        JSON_KEY_DMS_ABILITY_NAME,
181686862fbSopenharmony_ci        dmsAbilityInfo.abilityName,
182686862fbSopenharmony_ci        JsonType::STRING,
183686862fbSopenharmony_ci        false,
184686862fbSopenharmony_ci        parseResult,
185686862fbSopenharmony_ci        ArrayType::NOT_ARRAY);
186686862fbSopenharmony_ci    GetValueIfFindKey<std::vector<std::string>>(jsonObject,
187686862fbSopenharmony_ci        jsonObjectEnd,
188686862fbSopenharmony_ci        JSON_KEY_DMS_CONTINUETYPE,
189686862fbSopenharmony_ci        dmsAbilityInfo.continueType,
190686862fbSopenharmony_ci        JsonType::ARRAY,
191686862fbSopenharmony_ci        false,
192686862fbSopenharmony_ci        parseResult,
193686862fbSopenharmony_ci        ArrayType::STRING);
194686862fbSopenharmony_ci    GetValueIfFindKey<std::vector<uint8_t>>(jsonObject,
195686862fbSopenharmony_ci        jsonObjectEnd,
196686862fbSopenharmony_ci        JSON_KEY_DMS_CONTINUETYPEID,
197686862fbSopenharmony_ci        dmsAbilityInfo.continueTypeId,
198686862fbSopenharmony_ci        JsonType::ARRAY,
199686862fbSopenharmony_ci        false,
200686862fbSopenharmony_ci        parseResult,
201686862fbSopenharmony_ci        ArrayType::NUMBER);
202686862fbSopenharmony_ci    GetValueIfFindKey<std::string>(jsonObject,
203686862fbSopenharmony_ci        jsonObjectEnd,
204686862fbSopenharmony_ci        JSON_KEY_DMS_MODULENAME,
205686862fbSopenharmony_ci        dmsAbilityInfo.moduleName,
206686862fbSopenharmony_ci        JsonType::STRING,
207686862fbSopenharmony_ci        false,
208686862fbSopenharmony_ci        parseResult,
209686862fbSopenharmony_ci        ArrayType::NOT_ARRAY);
210686862fbSopenharmony_ci    if (parseResult != ERR_OK) {
211686862fbSopenharmony_ci        APP_LOGE("read module moduleInfo from jsonObject error, error code : %{public}d", parseResult);
212686862fbSopenharmony_ci    }
213686862fbSopenharmony_ci}
214686862fbSopenharmony_ci
215686862fbSopenharmony_cibool DmsBundleInfo::ReadFromParcel(Parcel &parcel)
216686862fbSopenharmony_ci{
217686862fbSopenharmony_ci    version = parcel.ReadUint32();
218686862fbSopenharmony_ci    versionCode = parcel.ReadUint32();
219686862fbSopenharmony_ci    compatibleVersionCode = parcel.ReadUint32();
220686862fbSopenharmony_ci    minCompatibleVersion = parcel.ReadUint32();
221686862fbSopenharmony_ci    targetVersionCode = parcel.ReadUint32();
222686862fbSopenharmony_ci    bundleName = Str16ToStr8(parcel.ReadString16());
223686862fbSopenharmony_ci    versionName = Str16ToStr8(parcel.ReadString16());
224686862fbSopenharmony_ci    appId = Str16ToStr8(parcel.ReadString16());
225686862fbSopenharmony_ci    enabled = parcel.ReadBool();
226686862fbSopenharmony_ci    bundleNameId = parcel.ReadUint16();
227686862fbSopenharmony_ci    updateTime = parcel.ReadInt64();
228686862fbSopenharmony_ci    developerId = Str16ToStr8(parcel.ReadString16());
229686862fbSopenharmony_ci    uint32_t abilityInfosSize;
230686862fbSopenharmony_ci    READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Uint32, parcel, abilityInfosSize);
231686862fbSopenharmony_ci    CONTAINER_SECURITY_VERIFY(parcel, abilityInfosSize, &dmsAbilityInfos);
232686862fbSopenharmony_ci    for (uint32_t i = 0; i < abilityInfosSize; i++) {
233686862fbSopenharmony_ci        std::unique_ptr<DmsAbilityInfo> dmsAbilityInfo(parcel.ReadParcelable<DmsAbilityInfo>());
234686862fbSopenharmony_ci        if (!dmsAbilityInfo) {
235686862fbSopenharmony_ci            APP_LOGE("ReadParcelable<DmsAbilityInfo> failed");
236686862fbSopenharmony_ci            return false;
237686862fbSopenharmony_ci        }
238686862fbSopenharmony_ci        dmsAbilityInfos.emplace_back(*dmsAbilityInfo);
239686862fbSopenharmony_ci    }
240686862fbSopenharmony_ci    uint32_t userIdArrSize;
241686862fbSopenharmony_ci    READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Uint32, parcel, userIdArrSize);
242686862fbSopenharmony_ci    CONTAINER_SECURITY_VERIFY(parcel, userIdArrSize, &userIdArr);
243686862fbSopenharmony_ci    for (uint32_t i = 0; i < userIdArrSize; i++) {
244686862fbSopenharmony_ci        uint8_t userId = parcel.ReadUint8();
245686862fbSopenharmony_ci        userIdArr.emplace_back(userId);
246686862fbSopenharmony_ci    }
247686862fbSopenharmony_ci    return true;
248686862fbSopenharmony_ci}
249686862fbSopenharmony_ci
250686862fbSopenharmony_cibool DmsBundleInfo::Marshalling(Parcel &parcel) const
251686862fbSopenharmony_ci{
252686862fbSopenharmony_ci    parcel.WriteUint32(version);
253686862fbSopenharmony_ci    parcel.WriteUint32(versionCode);
254686862fbSopenharmony_ci    parcel.WriteUint32(compatibleVersionCode);
255686862fbSopenharmony_ci    parcel.WriteUint32(minCompatibleVersion);
256686862fbSopenharmony_ci    parcel.WriteUint32(targetVersionCode);
257686862fbSopenharmony_ci    parcel.WriteString16(Str8ToStr16(bundleName));
258686862fbSopenharmony_ci    parcel.WriteString16(Str8ToStr16(versionName));
259686862fbSopenharmony_ci    parcel.WriteString16(Str8ToStr16(appId));
260686862fbSopenharmony_ci    parcel.WriteBool(enabled);
261686862fbSopenharmony_ci    parcel.WriteUint16(bundleNameId);
262686862fbSopenharmony_ci    parcel.WriteInt64(updateTime);
263686862fbSopenharmony_ci    for (auto &dmsAbilityInfo : dmsAbilityInfos) {
264686862fbSopenharmony_ci        (parcel).WriteParcelable(&dmsAbilityInfo);
265686862fbSopenharmony_ci    }
266686862fbSopenharmony_ci    for (auto userId : userIdArr) {
267686862fbSopenharmony_ci        (parcel).WriteUint8(userId);
268686862fbSopenharmony_ci    }
269686862fbSopenharmony_ci    return true;
270686862fbSopenharmony_ci}
271686862fbSopenharmony_ci
272686862fbSopenharmony_ciDmsBundleInfo *DmsBundleInfo::Unmarshalling(Parcel &parcel)
273686862fbSopenharmony_ci{
274686862fbSopenharmony_ci    DmsBundleInfo *info = new (std::nothrow) DmsBundleInfo();
275686862fbSopenharmony_ci    if (info != nullptr && !info->ReadFromParcel(parcel)) {
276686862fbSopenharmony_ci        delete info;
277686862fbSopenharmony_ci        info = nullptr;
278686862fbSopenharmony_ci    }
279686862fbSopenharmony_ci    return info;
280686862fbSopenharmony_ci}
281686862fbSopenharmony_ci
282686862fbSopenharmony_cistd::string DmsBundleInfo::ToString() const
283686862fbSopenharmony_ci{
284686862fbSopenharmony_ci    nlohmann::json jsonObject;
285686862fbSopenharmony_ci    jsonObject[JSON_KEY_VERSION] = version;
286686862fbSopenharmony_ci    jsonObject[AppExecFwk::Constants::BUNDLE_NAME] = bundleName;
287686862fbSopenharmony_ci    jsonObject[JSON_KEY_VERSION_CODE] = versionCode;
288686862fbSopenharmony_ci    jsonObject[JSON_KEY_VERSION_NAME] = versionName;
289686862fbSopenharmony_ci    jsonObject[JSON_KEY_COMPATIBLE_VERSION_CODE] = compatibleVersionCode;
290686862fbSopenharmony_ci    jsonObject[JSON_KEY_MIN_COMPATIBLE_VERSION] = minCompatibleVersion;
291686862fbSopenharmony_ci    jsonObject[JSON_KEY_TARGET_VERSION_CODE] = targetVersionCode;
292686862fbSopenharmony_ci    jsonObject[JSON_KEY_APP_ID] = appId;
293686862fbSopenharmony_ci    jsonObject[JSON_KEY_ENABLED] = enabled;
294686862fbSopenharmony_ci    jsonObject[JSON_KEY_BUNDLE_NAME_ID] = bundleNameId;
295686862fbSopenharmony_ci    jsonObject[JSON_KEY_UPDATE_TIME] = updateTime;
296686862fbSopenharmony_ci    jsonObject[JSON_KEY_DEVELOPER_ID] = developerId;
297686862fbSopenharmony_ci    jsonObject[JSON_KEY_DMS_ABILITY_INFOS] = dmsAbilityInfos;
298686862fbSopenharmony_ci    jsonObject[JSON_KEY_DMS_USERID] = userIdArr;
299686862fbSopenharmony_ci    return jsonObject.dump();
300686862fbSopenharmony_ci}
301686862fbSopenharmony_ci
302686862fbSopenharmony_cibool DmsBundleInfo::FromJsonString(const std::string &jsonString)
303686862fbSopenharmony_ci{
304686862fbSopenharmony_ci    nlohmann::json jsonObject = nlohmann::json::parse(jsonString, nullptr, false);
305686862fbSopenharmony_ci    if (jsonObject.is_discarded()) {
306686862fbSopenharmony_ci        return false;
307686862fbSopenharmony_ci    }
308686862fbSopenharmony_ci
309686862fbSopenharmony_ci    const auto &jsonObjectEnd = jsonObject.end();
310686862fbSopenharmony_ci    int32_t parseResult = ERR_OK;
311686862fbSopenharmony_ci    GetValueIfFindKey<uint32_t>(jsonObject, jsonObjectEnd, JSON_KEY_VERSION, version,
312686862fbSopenharmony_ci        JsonType::NUMBER, false, parseResult, ArrayType::NOT_ARRAY);
313686862fbSopenharmony_ci    GetValueIfFindKey<std::string>(jsonObject, jsonObjectEnd, AppExecFwk::Constants::BUNDLE_NAME, bundleName,
314686862fbSopenharmony_ci        JsonType::STRING, false, parseResult, ArrayType::NOT_ARRAY);
315686862fbSopenharmony_ci    GetValueIfFindKey<uint32_t>(jsonObject, jsonObjectEnd, JSON_KEY_VERSION_CODE, versionCode,
316686862fbSopenharmony_ci        JsonType::NUMBER, false, parseResult, ArrayType::NOT_ARRAY);
317686862fbSopenharmony_ci    GetValueIfFindKey<uint32_t>(jsonObject, jsonObjectEnd, JSON_KEY_COMPATIBLE_VERSION_CODE, compatibleVersionCode,
318686862fbSopenharmony_ci        JsonType::NUMBER, false, parseResult, ArrayType::NOT_ARRAY);
319686862fbSopenharmony_ci    GetValueIfFindKey<std::string>(jsonObject, jsonObjectEnd, JSON_KEY_VERSION_NAME, versionName,
320686862fbSopenharmony_ci        JsonType::STRING, false, parseResult, ArrayType::NOT_ARRAY);
321686862fbSopenharmony_ci    GetValueIfFindKey<uint32_t>(jsonObject, jsonObjectEnd, JSON_KEY_MIN_COMPATIBLE_VERSION, minCompatibleVersion,
322686862fbSopenharmony_ci        JsonType::NUMBER, false, parseResult, ArrayType::NOT_ARRAY);
323686862fbSopenharmony_ci    GetValueIfFindKey<uint32_t>(jsonObject, jsonObjectEnd, JSON_KEY_TARGET_VERSION_CODE, targetVersionCode,
324686862fbSopenharmony_ci        JsonType::NUMBER, false, parseResult, ArrayType::NOT_ARRAY);
325686862fbSopenharmony_ci    GetValueIfFindKey<std::string>(jsonObject, jsonObjectEnd, JSON_KEY_APP_ID, appId,
326686862fbSopenharmony_ci        JsonType::STRING, false, parseResult, ArrayType::NOT_ARRAY);
327686862fbSopenharmony_ci    GetValueIfFindKey<bool>(jsonObject, jsonObjectEnd, JSON_KEY_ENABLED, enabled,
328686862fbSopenharmony_ci        JsonType::BOOLEAN, false, parseResult, ArrayType::NOT_ARRAY);
329686862fbSopenharmony_ci    GetValueIfFindKey<uint16_t>(jsonObject, jsonObjectEnd, JSON_KEY_BUNDLE_NAME_ID, bundleNameId,
330686862fbSopenharmony_ci        JsonType::NUMBER, false, parseResult, ArrayType::NOT_ARRAY);
331686862fbSopenharmony_ci    GetValueIfFindKey<int64_t>(jsonObject, jsonObjectEnd, JSON_KEY_UPDATE_TIME, updateTime,
332686862fbSopenharmony_ci        JsonType::NUMBER, false, parseResult, ArrayType::NOT_ARRAY);
333686862fbSopenharmony_ci    GetValueIfFindKey<std::string>(jsonObject, jsonObjectEnd, JSON_KEY_DEVELOPER_ID, developerId,
334686862fbSopenharmony_ci        JsonType::STRING, false, parseResult, ArrayType::NOT_ARRAY);
335686862fbSopenharmony_ci    GetValueIfFindKey<std::vector<DmsAbilityInfo>>(jsonObject, jsonObjectEnd, JSON_KEY_DMS_ABILITY_INFOS,
336686862fbSopenharmony_ci        dmsAbilityInfos, JsonType::ARRAY, false, parseResult, ArrayType::OBJECT);
337686862fbSopenharmony_ci    GetValueIfFindKey<std::vector<uint8_t>>(jsonObject, jsonObjectEnd, JSON_KEY_DMS_USERID, userIdArr,
338686862fbSopenharmony_ci        JsonType::ARRAY, false, parseResult, ArrayType::NUMBER);
339686862fbSopenharmony_ci    return parseResult == ERR_OK;
340686862fbSopenharmony_ci}
341686862fbSopenharmony_ci}  // namespace DistributedSchedule
342686862fbSopenharmony_ci}  // namespace OHOS