Wie enterialisiere ich mich zu einem Merkmal, nicht zu einem konkreten Typ?

8

Ich versuche eine Struct-Serialisierung zu machen, bei der die Bytes schließlich in eine Pipe geschickt werden, rekonstruiert und Methoden aufgerufen werden.

Ich habe ein Merkmal erstellt, das diese Strukturen entsprechend implementieren würden, und ich benutze serde und serde-cbor für die Serialisierung:

%Vor%

Wenn ich versuche, die Bytes mit dem Merkmal als Typ zu rekonstruieren (vorausgesetzt, ich wüsste nicht, welches zugrundeliegende Objekt gesendet wird), beschwert sich der Compiler darüber, dass das Merkmal das Merkmal Sized nicht implementiert:

  %Vor%

Ich denke, es macht Sinn, da der Compiler nicht weiß, wie groß die Struktur sein soll und nicht wissen, wie man die Bytes dafür anordnet. Wenn ich die Zeile ändere, in der ich das Objekt deserialize, um den tatsächlichen Strukturtyp anzugeben, funktioniert es:

%Vor%

Gibt es ein besseres Muster, um dieses Serialisierungs- + Polymorphie-Verhalten zu erreichen?

    
Dash83 22.02.2017, 13:32
quelle

1 Antwort

6

Es sieht so aus, als wären Sie in dieselbe Falle geraten, in die ich geraten war, als ich von C ++ nach Rust gezogen bin. Versuchen, Polymorphismus zu verwenden, um eine feste Menge von Varianten eines Typs zu modellieren. Ruts enums (ähnlich Haskells enums und äquivalent zu Adas varianten Record-Typen) unterscheiden sich von klassischen enums in anderen Sprachen, weil die enum-Varianten eigene Felder haben können.

Ich schlage vor, dass Sie Ihren Code in

ändern %Vor%     
oli_obk - ker 24.02.2017, 09:06
quelle

Tags und Links