A Struct, possibly recursively nested, or a non-Struct element
that can be packed with tf.nest.flatten. If struct has
non-Struct-typed fields which should be flattened further, they should
not contain inner Structs, as these will not be flattened (e.g.
Struct([('a', collections.OrderedDict(b=Struct([('c', 5)])))]) would not
be valid).