18bf80f4bSopenharmony_ci/* 28bf80f4bSopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd. 38bf80f4bSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 48bf80f4bSopenharmony_ci * you may not use this file except in compliance with the License. 58bf80f4bSopenharmony_ci * You may obtain a copy of the License at 68bf80f4bSopenharmony_ci * 78bf80f4bSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 88bf80f4bSopenharmony_ci * 98bf80f4bSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 108bf80f4bSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 118bf80f4bSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 128bf80f4bSopenharmony_ci * See the License for the specific language governing permissions and 138bf80f4bSopenharmony_ci * limitations under the License. 148bf80f4bSopenharmony_ci */ 158bf80f4bSopenharmony_ci 168bf80f4bSopenharmony_ci#ifndef META_SRC_SERIALIZATION_IMPORTER_H 178bf80f4bSopenharmony_ci#define META_SRC_SERIALIZATION_IMPORTER_H 188bf80f4bSopenharmony_ci 198bf80f4bSopenharmony_ci#include <functional> 208bf80f4bSopenharmony_ci 218bf80f4bSopenharmony_ci#include <meta/ext/minimal_object.h> 228bf80f4bSopenharmony_ci#include <meta/interface/intf_attach.h> 238bf80f4bSopenharmony_ci#include <meta/interface/intf_container.h> 248bf80f4bSopenharmony_ci#include <meta/interface/intf_metadata.h> 258bf80f4bSopenharmony_ci#include <meta/interface/serialization/intf_import_context.h> 268bf80f4bSopenharmony_ci#include <meta/interface/serialization/intf_importer.h> 278bf80f4bSopenharmony_ci#include <meta/interface/serialization/intf_serializable.h> 288bf80f4bSopenharmony_ci 298bf80f4bSopenharmony_ci#include "../base_object.h" 308bf80f4bSopenharmony_ci#include "ser_nodes.h" 318bf80f4bSopenharmony_ci 328bf80f4bSopenharmony_ciMETA_BEGIN_NAMESPACE() 338bf80f4bSopenharmony_cinamespace Serialization { 348bf80f4bSopenharmony_ci 358bf80f4bSopenharmony_ciclass Importer : public Internal::BaseObjectFwd<Importer, META_NS::ClassId::Importer, IImporter, IImportFunctions> { 368bf80f4bSopenharmony_cipublic: 378bf80f4bSopenharmony_ci Importer() : registry_(GetObjectRegistry()), globalData_(registry_.GetGlobalSerializationData()) {} 388bf80f4bSopenharmony_ci explicit Importer(IObjectRegistry& reg, IGlobalSerializationData& data) : registry_(reg), globalData_(data) {} 398bf80f4bSopenharmony_ci 408bf80f4bSopenharmony_ci IObject::Ptr Import(const ISerNode::ConstPtr& tree) override; 418bf80f4bSopenharmony_ci ReturnError ImportValue(const ISerNode::ConstPtr& n, IAny& entity); 428bf80f4bSopenharmony_ci IAny::Ptr ImportAny(const ISerNode::ConstPtr& n); 438bf80f4bSopenharmony_ci IObject::Ptr ImportRef(const RefUri& ref); 448bf80f4bSopenharmony_ci 458bf80f4bSopenharmony_ci ReturnError ImportFromNode(const ISerNode::ConstPtr&, IAny& entity) override; 468bf80f4bSopenharmony_ci ReturnError AutoImportObject(const IMapNode& members, IObject::Ptr object); 478bf80f4bSopenharmony_ci 488bf80f4bSopenharmony_ciprivate: 498bf80f4bSopenharmony_ci InstanceId ConvertInstanceId(const InstanceId& id) const; 508bf80f4bSopenharmony_ci IObject::Ptr GetReferencedObject(const InstanceId& uid) const; 518bf80f4bSopenharmony_ci 528bf80f4bSopenharmony_ci IObject::Ptr ImportObject(const ISerNode::ConstPtr& n); 538bf80f4bSopenharmony_ci IObject::Ptr ImportObject(const IObjectNode::ConstPtr& node, IObject::Ptr object); 548bf80f4bSopenharmony_ci ReturnError ImportAny(const IObjectNode::ConstPtr& n, const IAny::Ptr& any); 558bf80f4bSopenharmony_ci ReturnError ImportBuiltinValue(const ISerNode::ConstPtr& n, IAny& entity); 568bf80f4bSopenharmony_ci ReturnError ImportPointer(const ISerNode::ConstPtr& n, IAny& entity); 578bf80f4bSopenharmony_ci 588bf80f4bSopenharmony_ci ReturnError ImportArray(const ISerNode::ConstPtr& n, IArrayAny& array); 598bf80f4bSopenharmony_ci ReturnError ImportIMetadata(const IMapNode& members, const IObject::Ptr& owner, IMetadata& data); 608bf80f4bSopenharmony_ci ReturnError ImportIAttach(const ISerNode::ConstPtr& node, const IObject::Ptr& owner, IAttach& cont); 618bf80f4bSopenharmony_ci ReturnError ImportIContainer(const ISerNode::ConstPtr& node, IContainer& cont); 628bf80f4bSopenharmony_ci ReturnError ImportIObjectFlags(const ISerNode::ConstPtr& node, IObjectFlags& flags); 638bf80f4bSopenharmony_ci 648bf80f4bSopenharmony_ci ReturnError AutoImportObject(const ISerNode::ConstPtr& node, IObject::Ptr object); 658bf80f4bSopenharmony_ci IObject::Ptr ResolveRefUri(const RefUri& uri) override; 668bf80f4bSopenharmony_ci ReturnError ImportWeakPtrInAny(const ISerNode::ConstPtr& node, const IAny::Ptr& any); 678bf80f4bSopenharmony_ci 688bf80f4bSopenharmony_ci bool IsRegisteredObjectType(const ObjectId& oid) const; 698bf80f4bSopenharmony_ci 708bf80f4bSopenharmony_ciprivate: 718bf80f4bSopenharmony_ci IObjectRegistry& registry_; 728bf80f4bSopenharmony_ci IGlobalSerializationData& globalData_; 738bf80f4bSopenharmony_ci Version importVersion_; 748bf80f4bSopenharmony_ci BASE_NS::unordered_map<InstanceId, InstanceId> mapInstanceIds_; 758bf80f4bSopenharmony_ci BASE_NS::vector<IImportFinalize::Ptr> finalizes_; 768bf80f4bSopenharmony_ci size_t tentative_ {}; 778bf80f4bSopenharmony_ci 788bf80f4bSopenharmony_ci struct DeferredUriResolve { 798bf80f4bSopenharmony_ci IAny::Ptr target; 808bf80f4bSopenharmony_ci RefUri uri; 818bf80f4bSopenharmony_ci }; 828bf80f4bSopenharmony_ci BASE_NS::vector<DeferredUriResolve> deferred_; 838bf80f4bSopenharmony_ci}; 848bf80f4bSopenharmony_ci 858bf80f4bSopenharmony_ciclass ImportContext : public IntroduceInterfaces<IImportContext> { 868bf80f4bSopenharmony_cipublic: 878bf80f4bSopenharmony_ci ImportContext(Importer& imp, IObject::Ptr p, IMapNode::ConstPtr node) : importer_(imp), object_(p), node_(node) {} 888bf80f4bSopenharmony_ci 898bf80f4bSopenharmony_ci bool HasMember(BASE_NS::string_view name) const override; 908bf80f4bSopenharmony_ci ReturnError Import(BASE_NS::string_view name, IAny& entity) override; 918bf80f4bSopenharmony_ci ReturnError ImportAny(BASE_NS::string_view name, IAny::Ptr& any) override; 928bf80f4bSopenharmony_ci ReturnError ImportWeakPtr(BASE_NS::string_view name, IObject::WeakPtr& ptr) override; 938bf80f4bSopenharmony_ci ReturnError AutoImport() override; 948bf80f4bSopenharmony_ci 958bf80f4bSopenharmony_ci IObject::Ptr ResolveRefUri(const RefUri& uri) override; 968bf80f4bSopenharmony_ci 978bf80f4bSopenharmony_ci ReturnError ImportFromNode(const ISerNode::ConstPtr&, IAny& entity) override; 988bf80f4bSopenharmony_ci 998bf80f4bSopenharmony_ciprivate: 1008bf80f4bSopenharmony_ci Importer& importer_; 1018bf80f4bSopenharmony_ci IObject::Ptr object_; 1028bf80f4bSopenharmony_ci IMapNode::ConstPtr node_; 1038bf80f4bSopenharmony_ci}; 1048bf80f4bSopenharmony_ci 1058bf80f4bSopenharmony_ci} // namespace Serialization 1068bf80f4bSopenharmony_ciMETA_END_NAMESPACE() 1078bf80f4bSopenharmony_ci 1088bf80f4bSopenharmony_ci#endif 109