2016-07-15 25 views
4

Ich habe ein anderes Proto importiert, das einen anderen Paketnamen als meinen hat. Um Nachrichten aus einem anderen Paket zu verwenden, haben Sie auf diese Nachricht mit dem Paketnamen zugegriffen.Import und Verwendung von verschiedenen Paketdateien in Protobuf?

Beispiel:

other.proto

package muthu.other; 

message Other{ 
    required float val = 1; 
} 

myproto.proto

package muthu.test; 

import "other.proto"; 

message MyProto{ 
    required string str = 1; 
    optional muthu.other.Other.val = 2; 
} 

Gibt es eine Möglichkeit val von muthu.other Paket direkt zu verwenden wie optional val = 2; anstelle von muthu.other.Other.val?

Konnte kein Hilfedokument diesbezüglich finden. Helfen Sie mir.

+0

Was tun Sie dies erwarten, zu tun? "val" ist ein Feld von "Other". Was bedeutet es, dieses Feld in einem anderen Typ zu "benutzen"? –

+0

@KentonVarda ich meinte, gibt es eine Möglichkeit, Paket direkt anstelle von Proto-Datei zu importieren? also kann ich val verwenden, anstatt ihm den Paketnamen zu geben. – Muthu

+0

Noch einmal, wofür willst du 'val' benutzen? Der Code, den du angegeben hast, macht keinen Sinn. 'val' ist ein Feld - was bedeutet es, dieses Feld innerhalb einer anderen Typdefinition zu referenzieren? –

Antwort

2

Wenn der Paketname gleich ist, dann können Sie den Paketnamen aus der Felddeklaration weglassen, ansonsten gibt es keinen anderen Weg. Wenn Sie muthu.test in dasselbe Paket aufnehmen können, indem Sie "package muthu.other" angeben, ist dies erlaubt.

Von Google Dokumentation von protobuf:

Sie können ein optionales Paket Spezifizierer zu einer .proto Datei in den Namenskollisionen zwischen Protokollnachrichtentypen zu verhindern.

package foo.bar; 
message Open { ... } 

Anschließend können Sie das Paket Spezifizierer verwenden, wenn Felder Ihres Nachrichtentypen definieren:

message Foo { 
    ... 
    required foo.bar.Open open = 1; 
    ... 
}