package Ġorg . b aby fish . kim mer . sql Ċ Ċ import Ġorg . b aby fish . kim mer . Draft Ċ import Ġorg . b aby fish . kim mer . meta . Immutable Type Ċ import Ġorg . b aby fish . kim mer . produce Ċ import Ġkotlin . reflect . K Class Ċ Ċ interface ĠAssociation < S , ĠSID , ĠT , ĠT ID >: ĠEntity < Association Id < SID , ĠT ID >> Ċ where ĠS : ĠEntity < SID >, ĠT : ĠEntity < TID >, ĠSID : ĠComparable < SID >, ĠT ID : ĠComparable < TID > Ġ{ ĊĊĠĠĠ Ġval Ġsource : ĠS ĊĊĠĠĠ Ġval Ġtarget : ĠT ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġfun Ġ< S , ĠSID , ĠT , ĠT ID > Ġof ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource : ĠS , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget : ĠT ĊĠĠĠĠĠĠĠ Ġ): ĠAssociation < S , ĠSID , ĠT , ĠT ID > ĊĠĠĠĠĠĠĠ Ġwhere ĠS : ĠEntity < SID >, ĠT : ĠEntity < TID >, ĠSID : ĠComparable < SID >, ĠT ID : ĠComparable < TID > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproduce Association ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImmutable Type . from Instance ( source ). kotlin Type Ġas ĠK Class < S >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImmutable Type . from Instance ( target ). kotlin Type Ġas ĠK Class < T > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . source Ġ= Ġsource ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . target Ġ= Ġtarget ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġ< S , ĠSID , ĠT , ĠT ID > Ġof ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource Type : ĠK Class < S >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource Id : ĠSID , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Type : ĠK Class < T >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Id : ĠT ID ĊĠĠĠĠĠĠĠ Ġ): ĠAssociation < S , ĠSID , ĠT , ĠT ID > ĊĠĠĠĠĠĠĠ Ġwhere ĠS : ĠEntity < SID >, ĠT : ĠEntity < TID >, ĠSID : ĠComparable < SID >, ĠT ID : ĠComparable < TID > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproduce Association ( source Type , Ġtarget Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . source Ġ= Ġproduce ( source Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDraft . set ( this , ĠEntity < SID >:: id , Ġsource Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . target Ġ= Ġproduce ( target Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDraft . set ( this , ĠEntity < TID >:: id , Ġtarget Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }