Wiederherstellen .proto-Datei aus descriptor-string. Möglich?
Ist es möglich, zu dekompilieren ein string, der Protocol-Buffer-Deskriptor zurück .proto-Datei?
Sagen, ich habe einen langen string wie
\n\file.proto\u001a\u000ccommon.proto\"\u00a3\u0001\n\nMsg1Request\u0012\u0017\n\u0006common\u0018\u0001 ...
etc.
Ich wiederherstellen müssen .proto, nicht notwendig, genau so, wie es war, aber kompilierbar.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, es sollte möglich sein, um etwas zu bekommen, was in der Nähe bekomme ursprünglichen definition. Ich kenne keinen bestehenden code, es zu tun (hoffentlich jemand anderes).
Hava ansehen, wie protocol buffers selbst verarbeitet den String.
Grundsätzlich
konvertieren Sie die Zeichenfolge in bytes (mit charset="ISO-8859-1" in java), dann wird es nur eine Protokoll-Puffer-Nachricht(format=FileDescriptorProto in java). Die FileDescriptorProto ist erbaut als Teil der Protokoll-Puffer installieren.
Extrahieren der Daten in der Protokoll-Puffer-Nachricht
Hier ist ein File-Descriptor-Protokoll angezeigt, in der Protokoll-Puffer-editor
In C++, die
FileDescriptor
- Schnittstelle hat eine MethodeDebugString()
welche Formate der Deskriptor Inhalt.proto
syntax -- also genau das, was Sie wollen. Um es verwenden zu können, müssen Sie zuerst den code schreiben, konvertieren Sie die raw -FileDescriptorProto
zu einemFileDescriptor
mit derDescriptorPool
- Schnittstelle.Etwas wie dies sollte es tun:
Müssen Sie feed dieses Programm die raw-bytes der FileDescriptorProto, die Sie bekommen können durch die Verwendung von Java für die Kodierung von string zu Byte mithilfe der ISO-8859-1-Zeichensatz.
Beachten Sie auch, dass die oben nicht funktioniert, wenn die Datei importiert beliebige andere Dateien-müssten Sie laden diese Importe in die
DescriptorPool
ersten.protoc --include_source_info --include_imports --descriptor_set_out=foo.desc foo.proto