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