• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2024 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 META_INTERFACE_SERIALIZATION_ISER_NODE_H
17 #define META_INTERFACE_SERIALIZATION_ISER_NODE_H
18 
19 #include <core/plugin/intf_interface.h>
20 
21 #include <meta/base/interface_macros.h>
22 #include <meta/base/namespace.h>
23 #include <meta/base/ref_uri.h>
24 #include <meta/base/version.h>
25 #include <meta/interface/serialization/ser_metadata.h>
26 
27 META_BEGIN_NAMESPACE()
28 
29 class ISerNodeVisitor;
30 
31 /// Serialisation intermediate form base node type
32 class ISerNode : public CORE_NS::IInterface {
33     META_INTERFACE(CORE_NS::IInterface, ISerNode, "eea35313-5add-4408-ae62-0dd7464b986c")
34 public:
35     /// Apply visitor for the node
36     virtual void Apply(ISerNodeVisitor&) = 0;
37 };
38 
39 /// Serialisation intermediate form root node
40 class IRootNode : public ISerNode {
41     META_INTERFACE(ISerNode, IRootNode, "d42016dc-3941-463b-b332-b101ca2a9665")
42 public:
43     /// Get metadata
44     virtual SerMetadata GetMetadata() const = 0;
45     /// Get root object
46     virtual ISerNode::Ptr GetObject() const = 0;
47 
48     virtual void SetMetadata(SerMetadata) = 0;
49     virtual void SetObject(ISerNode::Ptr) = 0;
50 };
51 
52 /// Serialisation intermediate form nil node
53 class INilNode : public ISerNode {
54     META_INTERFACE(ISerNode, INilNode, "d2712b6e-5c3c-4355-8c63-e039b946afdb")
55 public:
56 };
57 
58 /// Serialisation intermediate form object node
59 class IObjectNode : public ISerNode {
60     META_INTERFACE(ISerNode, IObjectNode, "9c702ee2-6943-4cba-97c8-ac4cf9549cd2")
61 public:
62     virtual BASE_NS::string GetObjectClassName() const = 0;
63     virtual BASE_NS::string GetObjectName() const = 0;
64     virtual ObjectId GetObjectId() const = 0;
65     virtual InstanceId GetInstanceId() const = 0;
66     virtual ISerNode::Ptr GetMembers() const = 0;
67 
68     virtual void SetObjectClassName(BASE_NS::string) = 0;
69     virtual void SetObjectName(BASE_NS::string) = 0;
70     virtual void SetObjectId(ObjectId) = 0;
71     virtual void SetInstanceId(InstanceId) = 0;
72     virtual void SetMembers(ISerNode::Ptr) = 0;
73 };
74 
75 /// Serialisation intermediate form array node
76 class IArrayNode : public ISerNode {
77     META_INTERFACE(ISerNode, IArrayNode, "40230896-a813-45df-b342-892d5b80405d")
78 public:
79     virtual BASE_NS::vector<ISerNode::Ptr> GetMembers() const = 0;
80     virtual void AddNode(const ISerNode::Ptr& node) = 0;
81 };
82 
83 struct NamedNode {
84     BASE_NS::string name;
85     ISerNode::Ptr node;
86 };
87 
88 /// Serialisation intermediate form map node
89 class IMapNode : public ISerNode {
90     META_INTERFACE(ISerNode, IMapNode, "2fecfa69-652e-41cc-9724-3145b43a9ec5")
91 public:
92     virtual BASE_NS::vector<NamedNode> GetMembers() const = 0;
93     virtual ISerNode::Ptr FindNode(BASE_NS::string_view name) const = 0;
94     virtual void AddNode(BASE_NS::string_view name, ISerNode::Ptr) = 0;
95 };
96 
97 /// Serialisation intermediate form built-in value node
98 template<typename Type>
99 class IBuiltinValueNode : public ISerNode {
100     META_INTERFACE(ISerNode, IBuiltinValueNode, MakeUid<Type>("SerNodes"))
101 public:
102     virtual Type GetValue() const = 0;
103     virtual void SetValue(const Type& value) = 0;
104 };
105 
106 using IBoolNode = IBuiltinValueNode<bool>;
107 using IDoubleNode = IBuiltinValueNode<double>;
108 using IIntNode = IBuiltinValueNode<int64_t>;
109 using IUIntNode = IBuiltinValueNode<uint64_t>;
110 using IStringNode = IBuiltinValueNode<BASE_NS::string>;
111 using IRefUriNode = IBuiltinValueNode<RefUri>;
112 
113 /// Serialisation intermediate form visitor base interface
114 class ISerNodeVisitor : public CORE_NS::IInterface {
115     META_INTERFACE(CORE_NS::IInterface, ISerNodeVisitor, "147d085e-a0c3-480b-ad21-37cb8db0c120")
116 public:
117     virtual void Visit(const IRootNode&) = 0;
118     virtual void Visit(const INilNode&) = 0;
119     virtual void Visit(const IObjectNode&) = 0;
120     virtual void Visit(const IArrayNode&) = 0;
121     virtual void Visit(const IMapNode&) = 0;
122     virtual void Visit(const IBoolNode&) = 0;
123     virtual void Visit(const IDoubleNode&) = 0;
124     virtual void Visit(const IIntNode&) = 0;
125     virtual void Visit(const IUIntNode&) = 0;
126     virtual void Visit(const IStringNode&) = 0;
127     virtual void Visit(const IRefUriNode&) = 0;
128     virtual void Visit(const ISerNode&) = 0;
129 };
130 
131 META_INTERFACE_TYPE(ISerNode)
132 
133 META_END_NAMESPACE()
134 
135 #endif
136