object :empty object Base member enum1: TestEnum optional=False member c_d: str optional=True object Branch1 member string: str optional=False object Branch2 member value: int optional=False enum TestEnum ['base', 'c-d'] object TestUnion base Base tag enum1 case base: Branch1 case c-d: Branch2