package Ġcom . ap ure base . k graphql . schema . dsl . types Ċ Ċ import Ġcom . ap ure base . k graphql . schema . dsl . Item DSL Ċ import Ġkotlin . reflect . K Class ĊĊ Ċ class ĠUnion Type DSL < T : ĠAny >() Ġ: ĠItem DSL () Ġ{ ĊĊĠĠĠ Ġinternal Ġval Ġpossible Types Ġ= Ġmutable Set Of < SubType <* >>() ĊĊĠĠĠ Ġvar Ġsub Type Block : ĠType DSL <* >. () Ġ-> ĠUnit Ġ= Ġ{} ĊĊĠĠĠ Ġfun Ġ< S Ġ: ĠT > Ġtype ( k Class Ġ: ĠK Class < S >, Ġblock : ĠType DSL < S >. () Ġ-> ĠUnit Ġ= Ġ{} ){ ĊĠĠĠĠĠĠĠ Ġpossible Types . remove If Ġ{ Ġit . type Ġ== Ġk Class Ġ} ĊĠĠĠĠĠĠĠ Ġpossible Types . add ( SubType ( k Class , Ġblock )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠS Ġ: ĠT > type ( no inline Ġblock : ĠType DSL < S >. () Ġ-> ĠUnit Ġ= Ġ{} ){ ĊĠĠĠĠĠĠĠ Ġtype ( S :: class , Ġblock ) ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġinternal Ġdata Ġclass ĠSub Type < S : ĠAny >( val Ġtype : ĠK Class < S >, Ġval Ġdef : ĠType DSL < S >. () Ġ-> ĠUnit Ġ= Ġ{}) Ċ } Ċ