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_IDL_RUSTCODEEMITTER_H
17 #define OHOS_IDL_RUSTCODEEMITTER_H
18 
19 #include <string>
20 
21 #include "codegen/code_emitter.h"
22 #include "util/string_builder.h"
23 
24 namespace OHOS {
25 namespace Idl {
26 class RustCodeEmitter : public CodeEmitter {
27 public:
RustCodeEmitter(MetaComponent * mc)28     RustCodeEmitter(MetaComponent* mc)
29         : CodeEmitter(mc)
30     {}
31 
32     void EmitInterface() override;
33 
34     void EmitInterfaceProxy() override;
35 
36     void EmitInterfaceStub() override;
37 
38 private:
39     void EmitInterface(StringBuilder& sb);
40 
41     void EmitLicense(StringBuilder& sb);
42 
43     void EmitMacros(StringBuilder& sb);
44 
45     void EmitHeaders(StringBuilder& sb);
46 
47     void EmitIPCHeaders(StringBuilder& sb);
48 
49     void EmitCommonHeaders(StringBuilder& sb);
50 
51     bool EmitCustomHeaders(StringBuilder& sb);
52 
53     String TrimDot(const String& fpnp);
54 
55     String GeneratePath(const String& fpnp);
56 
57     bool AppendRealPath(StringBuilder& sb, const String& fpnp);
58 
59     void AppendCommandEnums(StringBuilder& sb);
60 
61     String GetCodeFromMethod(const char* name);
62 
63     String GetNameFromParameter(const char* name);
64 
65     void EmitCommandEnums(StringBuilder& sb);
66 
67     void EmitCommands(StringBuilder& sb);
68 
69     void EmitRemoteObject(StringBuilder& sb);
70 
71     void EmitBrokers(StringBuilder& sb);
72 
73     void WrapLine(StringBuilder& sb, int index, const String& prefix);
74 
75     void AppendBrokerMethods(StringBuilder& sb);
76 
77     void AppendBrokerParameters(StringBuilder& sb, MetaParameter* mp);
78 
79     String ConvertType(MetaType* mt, bool pt = false);
80 
81     void EmitRemoteRequest(StringBuilder& sb);
82 
83     void ReadListFromParcel(StringBuilder& sb, MetaType* mt, const String& result,
84         const String& name, const String& prefix);
85 
86     void ReadMapFromParcel(StringBuilder& sb, MetaType* mt, const String& result,
87         const String& name, const String& prefix);
88 
89     void ReadFromParcel(StringBuilder& sb, MetaType* mt, const String& result,
90         const String& name, const String& prefix);
91 
92     void WriteListToParcel(StringBuilder& sb, MetaType* mt, const String& result,
93         const String& name, const String& prefix);
94 
95     void WriteMapToParcel(StringBuilder& sb, MetaType* mt, const String& result,
96         const String& name, const String& prefix);
97 
98     void WriteToParcel(StringBuilder& sb, MetaType* mt, const String& result,
99         const String& name, const String& prefix);
100 
101     void AddRemoteRequestMethods(StringBuilder& sb);
102 
103     void AddRemoteRequestParameters(StringBuilder& sb, MetaMethod* mm);
104 
105     void EmitStub(StringBuilder& sb);
106 
107     void AppendStubMethods(StringBuilder& sb);
108 
109     void AppendStubParameters(StringBuilder& sb, MetaMethod* mm);
110 
111     void EmitProxy(StringBuilder& sb);
112 
113     void AppendProxyMethods(StringBuilder& sb);
114 };
115 }
116 }
117 #endif
118