Lines Matching refs:sb
33 StringBuilder sb;
34 EmitInterface(sb);
35 String data = sb.ToString();
51 void RustCodeEmitter::EmitInterface(StringBuilder& sb)
54 EmitLicense(sb);
55 sb.Append("\n");
57 EmitMacros(sb);
58 EmitHeaders(sb);
59 sb.Append("\n");
60 EmitCommands(sb);
61 sb.Append("\n");
62 EmitRemoteObject(sb);
63 sb.Append("\n");
64 EmitBrokers(sb);
65 sb.Append("\n");
66 EmitRemoteRequest(sb);
67 sb.Append("\n");
68 EmitStub(sb);
69 sb.Append("\n");
70 EmitProxy(sb);
73 void RustCodeEmitter::EmitLicense(StringBuilder& sb)
75 sb.Append(metaInterface_->license_).Append("\n");
78 void RustCodeEmitter::EmitMacros(StringBuilder& sb)
80 sb.Append("#![allow(missing_docs)]\n");
81 sb.Append("#![allow(unused_variables)]\n");
82 sb.Append("#![allow(unused_mut)]\n");
83 sb.Append("\n");
85 void RustCodeEmitter::EmitHeaders(StringBuilder& sb)
87 EmitCommonHeaders(sb);
88 EmitIPCHeaders(sb);
89 if (EmitCustomHeaders(sb)) {
90 sb.Append("\n");
94 void RustCodeEmitter::EmitIPCHeaders(StringBuilder& sb)
96 sb.Append("extern crate ipc_rust;\n");
97 sb.Append("\n");
98 sb.Append("use ipc_rust::{\n");
99 sb.Append(" IRemoteBroker, IRemoteObj, RemoteStub, Result,\n");
100 sb.Append(" RemoteObj, define_remote_object, FIRST_CALL_TRANSACTION\n");
101 sb.Append("};\n");
102 sb.Append("use ipc_rust::{MsgParcel, BorrowedMsgParcel};\n");
103 sb.Append("\n");
106 void RustCodeEmitter::EmitCommonHeaders(StringBuilder& sb)
114 sb.Append("use std::collections::HashMap;\n");
125 sb.Append("\n");
181 bool RustCodeEmitter::AppendRealPath(StringBuilder& sb, const String& fpnpp)
187 sb.Append("use ").Append(result).Append(";\n");
191 bool RustCodeEmitter::EmitCustomHeaders(StringBuilder& sb)
196 bool addPathMsRes = AppendRealPath(sb, String(ms->namespace_) + String(ms->name_));
203 bool addPathMiRes = AppendRealPath(sb, String(mi->namespace_) + String(mi->name_));
210 void RustCodeEmitter::EmitCommands(StringBuilder& sb)
212 EmitCommandEnums(sb);
215 void RustCodeEmitter::AppendCommandEnums(StringBuilder& sb)
218 sb.AppendFormat(" %s = FIRST_CALL_TRANSACTION,\n",
224 sb.AppendFormat(" %s,\n", GetCodeFromMethod(mm->name_).string(), i);
230 StringBuilder sb;
231 sb.Append("Code");
237 sb.Append(toupper(*p));
240 sb.Append(*p);
247 return sb.ToString();
252 StringBuilder sb;
258 sb.Append('p');
264 sb.Append('_');
265 sb.Append(tolower(*p));
267 sb.Append(*p);
271 return sb.ToString();
274 void RustCodeEmitter::EmitCommandEnums(StringBuilder& sb)
276 sb.AppendFormat("pub enum %sCode {\n", interfaceName_.string());
277 AppendCommandEnums(sb);
278 sb.Append("}\n");
281 void RustCodeEmitter::EmitRemoteObject(StringBuilder& sb)
283 sb.Append("define_remote_object!(\n");
285 sb.AppendFormat(" %s[\"%s\"] {\n", interfaceName_.string(), interfaceName_.string());
287 sb.AppendFormat(" %s[\"%s\"] {\n", interfaceName_.string(), interfaceFullName_.string());
289 sb.AppendFormat(" stub: %s(on_remote_request),\n", stubName_.string());
290 sb.AppendFormat(" proxy: %s,\n", proxyName_.string());
291 sb.Append(" }\n");
292 sb.Append(");\n");
295 void RustCodeEmitter::EmitBrokers(StringBuilder& sb)
297 sb.AppendFormat("pub trait %s: IRemoteBroker {\n", interfaceName_.string());
298 AppendBrokerMethods(sb);
299 sb.Append("}\n");
302 void RustCodeEmitter::WrapLine(StringBuilder& sb, int index, const String& prefix)
305 sb.AppendFormat(",\n%s", prefix.string());
307 sb.Append(", ");
311 void RustCodeEmitter::AppendBrokerMethods(StringBuilder& sb)
315 sb.AppendFormat(" fn %s(&self", mm->name_);
317 WrapLine(sb, i, " ");
318 AppendBrokerParameters(sb, mm->parameters_[i]);
320 sb.AppendFormat(") -> Result<%s>;\n", ConvertType(metaComponent_->types_[mm->returnTypeIndex_]).string());
324 void RustCodeEmitter::AppendBrokerParameters(StringBuilder& sb, MetaParameter* mp)
326 sb.AppendFormat("%s: &%s",
371 void RustCodeEmitter::EmitRemoteRequest(StringBuilder& sb)
373 sb.AppendFormat("fn on_remote_request(stub: &dyn %s, code: u32, data: &BorrowedMsgParcel,\n",
375 sb.Append(" reply: &mut BorrowedMsgParcel) -> Result<()> {\n");
376 sb.Append(" match code {\n");
377 AddRemoteRequestMethods(sb);
378 sb.Append(" _ => Err(-1)\n");
379 sb.Append(" }\n");
380 sb.Append("}\n");
383 void RustCodeEmitter::AddRemoteRequestParameters(StringBuilder& sb, MetaMethod* mm)
387 sb.AppendFormat("&%s", GetNameFromParameter(mp->name_).string());
389 WrapLine(sb, i, " ");
394 void RustCodeEmitter::ReadListFromParcel(StringBuilder& sb, MetaType* mt, const String& result,
397 sb.Append(prefix).AppendFormat("let %s : %s = %s.read()?;\n",
401 void RustCodeEmitter::ReadMapFromParcel(StringBuilder& sb, MetaType* mt, const String& result,
404 sb.Append(prefix).AppendFormat("let mut %s = HashMap::new();\n", name.string());
405 sb.Append(prefix).AppendFormat("let len = %s.read()?;\n", result.string());
406 sb.Append(prefix).Append("for i in 0..len {\n");
411 ReadFromParcel(sb, metaComponent_->types_[mt->nestedTypeIndexes_[0]],
413 ReadFromParcel(sb, metaComponent_->types_[mt->nestedTypeIndexes_[1]],
415 sb.Append(prefix + " ").AppendFormat("%s.insert(%s, %s);\n",
417 sb.Append(prefix).Append("}\n");
420 void RustCodeEmitter::ReadFromParcel(StringBuilder& sb, MetaType* mt, const String& result,
424 ReadMapFromParcel(sb, mt, result, name, prefix);
426 ReadListFromParcel(sb, mt, result, name, prefix);
428 sb.Append(prefix).AppendFormat("let %s : %s = %s.read()?;\n",
433 void RustCodeEmitter::WriteListToParcel(StringBuilder& sb, MetaType* mt, const String& result,
436 sb.Append(prefix).AppendFormat("%s.write(&%s)?;\n", result.string(), name.string());
439 void RustCodeEmitter::WriteMapToParcel(StringBuilder& sb, MetaType* mt, const String& result,
442 sb.Append(prefix).AppendFormat("%s.write(&(%s.len() as u32))?;\n", result.string(), name.string());
443 sb.Append(prefix).AppendFormat("for (key, value) in %s.iter() {\n", name.string());
444 WriteToParcel(sb, metaComponent_->types_[mt->nestedTypeIndexes_[0]], result, "key", prefix + " ");
445 WriteToParcel(sb, metaComponent_->types_[mt->nestedTypeIndexes_[1]], result, "value", prefix + " ");
446 sb.Append(prefix).Append("}\n");
449 void RustCodeEmitter::WriteToParcel(StringBuilder& sb, MetaType* mt, const String& result,
453 WriteMapToParcel(sb, mt, result, name, prefix);
455 WriteListToParcel(sb, mt, result, name, prefix);
457 sb.Append(prefix).AppendFormat("%s.write(&%s)?;\n", result.string(), name.string());
461 void RustCodeEmitter::AddRemoteRequestMethods(StringBuilder& sb)
465 sb.AppendFormat(" %d => {\n", i + 1);
467 ReadFromParcel(sb, metaComponent_->types_[mm->parameters_[j]->typeIndex_], "data",
472 sb.AppendFormat(" let result = stub.%s(", mm->name_);
474 sb.AppendFormat(" stub.%s(", mm->name_);
476 AddRemoteRequestParameters(sb, mm);
477 sb.Append(")?;\n");
479 WriteToParcel(sb, mt, "reply", "result", " ");
481 sb.Append(" Ok(())\n");
482 sb.Append(" }\n");
486 void RustCodeEmitter::EmitStub(StringBuilder& sb)
488 sb.AppendFormat("impl %s for RemoteStub<%s> {\n", interfaceName_.string(), stubName_.string());
489 AppendStubMethods(sb);
490 sb.Append("}\n");
493 void RustCodeEmitter::AppendStubParameters(StringBuilder& sb, MetaMethod* mm)
496 sb.Append(GetNameFromParameter(mm->parameters_[i]->name_));
498 WrapLine(sb, i, " ");
503 void RustCodeEmitter::AppendStubMethods(StringBuilder& sb)
507 sb.AppendFormat(" fn %s(&self", mm->name_);
509 WrapLine(sb, i, " ");
510 AppendBrokerParameters(sb, mm->parameters_[i]);
513 sb.AppendFormat(") -> Result<%s> {\n",
515 sb.AppendFormat(" self.0.%s(", mm->name_);
516 AppendStubParameters(sb, mm);
517 sb.Append(")\n");
518 sb.Append(" }\n");
520 sb.Append("\n");
525 void RustCodeEmitter::EmitProxy(StringBuilder& sb)
527 sb.AppendFormat("impl %s for %s {\n", interfaceName_.string(), proxyName_.string());
528 AppendProxyMethods(sb);
529 sb.Append("}\n");
532 void RustCodeEmitter::AppendProxyMethods(StringBuilder& sb)
536 sb.AppendFormat(" fn %s(&self", mm->name_);
538 WrapLine(sb, i, " ");
539 AppendBrokerParameters(sb, mm->parameters_[i]);
541 sb.AppendFormat(") -> Result<%s> {\n",
543 sb.Append(" let mut data = MsgParcel::new().expect(\"MsgParcel should success\");\n");
545 WriteToParcel(sb, metaComponent_->types_[mm->parameters_[j]->typeIndex_], "data",
550 sb.AppendFormat(" let _reply = self.remote.send_request(%sCode", interfaceName_.string());
552 sb.AppendFormat(" let reply = self.remote.send_request(%sCode", interfaceName_.string());
554 sb.AppendFormat("::%s as u32, &data, ", GetCodeFromMethod(mm->name_).string());
556 sb.Append("true");
558 sb.Append("false");
560 sb.Append(")?;\n");
562 sb.Append(" ").Append("Ok(())\n");
564 ReadFromParcel(sb, mt, "reply", "result", " ");
565 sb.Append(" ").Append("Ok(result)\n");
567 sb.Append(" }\n");
570 sb.Append("\n");