Orange does not like Tuples
Infiltrator opened this issue · 2 comments
The following code fails with no property '_expand_field_0' for tuple '(const(Class))'
:
import std.typecons;
import orange.serialization._;
import orange.serialization.archives._;
class Class { }
alias Tuple!(Class) Tup;
class Container { Tup[] tuples; }
void save(Container container) {
auto archive = new XmlArchive!(char);
auto serialiser = new Serializer(archive);
serialiser.serialize(container);
}
src/orange/orange/serialization/Serializer.d-mixin-1512:1512: error: no property '_expand_field_0' for tuple '(const(Class))' src/orange/orange/serialization/Serializer.d:825: error: template instance orange.serialization.Serializer.Serializer.objectStructSerializeHelper!(const(Tuple!(Class))) error instantiating src/orange/orange/serialization/Serializer.d:721: note: instantiated from here: serializeStruct!(const(Tuple!(Class))) src/orange/orange/serialization/Serializer.d:850: note: instantiated from here: serializeInternal!(const(Tuple!(Class))) src/orange/orange/serialization/Serializer.d:727: note: instantiated from here: serializeArray!(Tuple!(Class)[]) src/orange/orange/serialization/Serializer.d:924: note: ... (4 instantiations, -v to show) ... src/orange/orange/serialization/Serializer.d:665: note: instantiated from here: serializeInternal!(Container) src/saving.d:14: note: instantiated from here: serialize!(Container) src/orange/orange/serialization/Serializer.d:721: error: template instance orange.serialization.Serializer.Serializer.serializeStruct!(const(Tuple!(Class))) error instantiating src/orange/orange/serialization/Serializer.d:850: note: instantiated from here: serializeInternal!(const(Tuple!(Class))) src/orange/orange/serialization/Serializer.d:727: note: instantiated from here: serializeArray!(Tuple!(Class)[]) src/orange/orange/serialization/Serializer.d:924: note: instantiated from here: serializeInternal!(Tuple!(Class)[]) src/orange/orange/serialization/Serializer.d:1541: note: ... (3 instantiations, -v to show) ... src/orange/orange/serialization/Serializer.d:665: note: instantiated from here: serializeInternal!(Container) src/saving.d:14: note: instantiated from here: serialize!(Container) src/orange/orange/serialization/Serializer.d:850: error: template instance orange.serialization.Serializer.Serializer.serializeInternal!(const(Tuple!(Class))) error instantiating src/orange/orange/serialization/Serializer.d:727: note: instantiated from here: serializeArray!(Tuple!(Class)[]) src/orange/orange/serialization/Serializer.d:924: note: instantiated from here: serializeInternal!(Tuple!(Class)[]) src/orange/orange/serialization/Serializer.d:1541: note: instantiated from here: serializePointer!(Tuple!(Class)[]*) src/orange/orange/serialization/Serializer.d:798: note: ... (2 instantiations, -v to show) ... src/orange/orange/serialization/Serializer.d:665: note: instantiated from here: serializeInternal!(Container) src/saving.d:14: note: instantiated from here: serialize!(Container) src/orange/orange/serialization/Serializer.d:727: error: template instance orange.serialization.Serializer.Serializer.serializeArray!(Tuple!(Class)[]) error instantiating src/orange/orange/serialization/Serializer.d:924: note: instantiated from here: serializeInternal!(Tuple!(Class)[]) src/orange/orange/serialization/Serializer.d:1541: note: instantiated from here: serializePointer!(Tuple!(Class)[]*) src/orange/orange/serialization/Serializer.d:798: note: instantiated from here: objectStructSerializeHelper!(Container) src/orange/orange/serialization/Serializer.d:718: note: ... (1 instantiations, -v to show) ... src/orange/orange/serialization/Serializer.d:665: note: instantiated from here: serializeInternal!(Container) src/saving.d:14: note: instantiated from here: serialize!(Container) src/orange/orange/serialization/Serializer.d:924: error: template instance orange.serialization.Serializer.Serializer.serializeInternal!(Tuple!(Class)[]) error instantiating src/orange/orange/serialization/Serializer.d:1541: note: instantiated from here: serializePointer!(Tuple!(Class)[]*) src/orange/orange/serialization/Serializer.d:798: note: instantiated from here: objectStructSerializeHelper!(Container) src/orange/orange/serialization/Serializer.d:718: note: instantiated from here: serializeObject!(Container) src/orange/orange/serialization/Serializer.d:665: note: instantiated from here: serializeInternal!(Container) src/saving.d:14: note: instantiated from here: serialize!(Container) src/orange/orange/serialization/Serializer.d:1541: error: template instance orange.serialization.Serializer.Serializer.serializePointer!(Tuple!(Class)[]*) error instantiating src/orange/orange/serialization/Serializer.d:798: note: instantiated from here: objectStructSerializeHelper!(Container) src/orange/orange/serialization/Serializer.d:718: note: instantiated from here: serializeObject!(Container) src/orange/orange/serialization/Serializer.d:665: note: instantiated from here: serializeInternal!(Container) src/saving.d:14: note: instantiated from here: serialize!(Container) src/orange/orange/serialization/Serializer.d:798: error: template instance orange.serialization.Serializer.Serializer.objectStructSerializeHelper!(Container) error instantiating src/orange/orange/serialization/Serializer.d:718: note: instantiated from here: serializeObject!(Container) src/orange/orange/serialization/Serializer.d:665: note: instantiated from here: serializeInternal!(Container) src/saving.d:14: note: instantiated from here: serialize!(Container) src/orange/orange/serialization/Serializer.d:718: error: template instance orange.serialization.Serializer.Serializer.serializeObject!(Container) error instantiating src/orange/orange/serialization/Serializer.d:665: note: instantiated from here: serializeInternal!(Container) src/saving.d:14: note: instantiated from here: serialize!(Container) src/orange/orange/serialization/Serializer.d:665: error: template instance orange.serialization.Serializer.Serializer.serializeInternal!(Container) error instantiating src/saving.d:14: note: instantiated from here: serialize!(Container) src/saving.d:14: error: template instance orange.serialization.Serializer.Serializer.serialize!(Container) error instantiating
I'll see what I can do.
It works (or rather doesn't) with alias Tuple!(int) Tup;
, so it's not a class thing.
And also without the container:
import std.typecons;
import orange.serialization._;
import orange.serialization.archives._;
alias Tuple!(int) Tup;
void save() {
auto archive = new XmlArchive!(char);
auto serialiser = new Serializer(archive);
auto tup = Tup(2);
serialiser.serialize(tup);
}
With a shorter error message list:
src/orange/orange/serialization/Serializer.d-mixin-1512:1512: error: no property '_expand_field_0' for tuple '(int)'
src/orange/orange/serialization/Serializer.d:825: error: template instance orange.serialization.Serializer.Serializer.objectStructSerializeHelper!(Tuple!int) error instantiating
src/orange/orange/serialization/Serializer.d:721: note: instantiated from here: serializeStruct!(Tuple!int)
src/orange/orange/serialization/Serializer.d:665: note: instantiated from here: serializeInternal!(Tuple!int)
src/saving.d:11: note: instantiated from here: serialize!(Tuple!int)
src/orange/orange/serialization/Serializer.d:721: error: template instance orange.serialization.Serializer.Serializer.serializeStruct!(Tuple!int) error instantiating
src/orange/orange/serialization/Serializer.d:665: note: instantiated from here: serializeInternal!(Tuple!int)
src/saving.d:11: note: instantiated from here: serialize!(Tuple!int)
src/orange/orange/serialization/Serializer.d:665: error: template instance orange.serialization.Serializer.Serializer.serializeInternal!(Tuple!int) error instantiating
src/saving.d:11: note: instantiated from here: serialize!(Tuple!int)
src/saving.d:11: error: template instance orange.serialization.Serializer.Serializer.serialize!(Tuple!int) error instantiating