Да, начиная с Thrift 0.9.2, поддерживается этот сценарий .
С любой более ранней версией Thrift следующее (намеренно) приводит к сообщению об ошибке компилятора:
struct Foo {
1 : Foo foo // error - Foo not fully defined yet
2 : Bar bar // error - Bar not defined yet
}
struct Bar {
1 : Foo left // ok, Foo has been defined earlier
2 : Foo right // ok, Foo has been defined earlier
}
Хотя есть еще несколько предостережений.Девеопер отвечает за то, чтобы не создавать бесконечные петли или алмазные ссылки, такие как
var foo = new Foo();
foo.foo = foo; // will crash on serialization with stack overflow
var bar = new Bar();
bar.left = foo;
bar.right = foo; // points to same object only BEFORE deserialization