package Ġcom . kor rit . kotlin . openapi Ċ Ċ import Ġcom . k ori it . kotlin . slf 4 j . logger Ċ import Ġcom . kor rit . kotlin . openapi . model . Components Ċ import Ġcom . kor rit . kotlin . openapi . model . Header Ċ import Ġcom . kor rit . kotlin . openapi . model . MediaType Ċ import Ġcom . kor rit . kotlin . openapi . model . Open API Ċ import Ġcom . kor rit . kotlin . openapi . model . Operation Ċ import Ġcom . kor rit . kotlin . openapi . model . Parameter Ċ import Ġcom . kor rit . kotlin . openapi . model . Path Ċ import Ġcom . kor rit . kotlin . openapi . model . Property Ċ import Ġcom . kor rit . kotlin . openapi . model . RequestBody Ċ import Ġcom . kor rit . kotlin . openapi . model . Response Ċ import Ġcom . kor rit . kotlin . openapi . model . Schema Ċ import Ġorg . junit . jupiter . api . Assertions . assertTrue Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġjava . lang . reflect . Field Ċ import Ġkotlin . reflect . K Parameter Ċ import Ġkotlin . reflect . full . member Functions Ċ import Ġkotlin . reflect . full . member Properties Ċ import Ġkotlin . reflect . jvm . java Field Ċ Ċ internal Ġclass ĠOpenAPI Matcher Test Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlog Ġ= Ġlogger Ġ{} ĊĊĠĠĠ Ġprivate Ġval Ġmodel Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠ Ġ// ĠComponents :: class Ġis Ġonly Ġimportant Ġwhen Ġresolving Ġreferences ĊĠĠĠĠĠĠĠ ĠHeader :: class , ĊĠĠĠĠĠĠĠ ĠMediaType :: class , ĊĠĠĠĠĠĠĠ ĠOpenAPI :: class , ĊĠĠĠĠĠĠĠ ĠOperation :: class , ĊĠĠĠĠĠĠĠ ĠParameter :: class , ĊĠĠĠĠĠĠĠ ĠPath :: class , ĊĠĠĠĠĠĠĠ ĠProperty :: class , ĊĠĠĠĠĠĠĠ ĠRequest Body :: class , ĊĠĠĠĠĠĠĠ ĠResponse :: class , ĊĠĠĠĠĠĠĠ ĠSchema :: class ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Should Ġhave Ġmatcher Ġfor Ġall Ġmodel Ġobjects `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfuncs Ġ= ĠOpenAPI Matcher :: class . member Functions . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . parameters ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . kind Ġ!= ĠK Parameter . Kind . INSTANCE Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . type . classifier Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( obj Ġin Ġmodel ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( obj Ġ== ĠComponents :: class ) Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatcher Ġ= Ġfuncs . find Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . size Ġ== Ġ 2 Ġ&& Ġit [ 0 ] Ġ== Ġobj Ġ&& Ġit [ 1 ] Ġ== Ġobj ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( matcher Ġ!= Ġnull , Ġ"$ obj Ġhas Ġno Ġmatcher Ġfunction ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Should Ġdetect Ġchanges Ġof Ġall Ġrelevant Ġfields `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġspec Ġ= Ġnew Open API () ĊĠĠĠĠĠĠĠ ĠassertTrue ( spec . check Errors (). isEmpty ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThose Ġare Ġcompatibility Ġir relevant Ġand Ġdis cre p ancies Ġshould Ġnot Ġbe Ġconsidered Ġan Ġerror ĊĠĠĠĠĠĠĠ Ġval Ġexceptions Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResponse :: description . java Field !! , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠParameter :: description . java Field !! , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSchema :: title . java Field !! ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġverify ( spec , Ġspec , Ġexceptions ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġverify ( spec : ĠOpenAPI , Ġobj : ĠAny , Ġexceptions : ĠList < Field >) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( prop Ġin Ġobj :: class . member Properties ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfield Ġ= Ġprop . java Field !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġfield . get ( obj ) Ġ?: Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" Checking : Ġ${ obj :: class . simple Name } :: ${ field . name }") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( field Ġin Ġexceptions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" Skipping Ġexception ...") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġis ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield . set ( obj , Ġ" other Ġ$ value ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( spec . check Errors (). isNotEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield . set ( obj , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( value Ġis ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield . set ( obj , Ġ! value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( spec . check Errors (). isNotEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield . set ( obj , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( value :: class Ġin Ġmodel ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( spec , Ġvalue , Ġexceptions ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( value Ġis ĠList <* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelem Ġ= Ġvalue [ 0 ] !! ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( elem :: class Ġin Ġmodel ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( spec , Ġelem , Ġexceptions ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( elem Ġ! is ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠAssertionError (" Don 't Ġknow Ġhow Ġto Ġverify Ġlist Ġof Ġ'${ elem :: class . simple Name }' ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield . set ( obj , ĠlistOf < String >()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( spec . check Errors (). isNotEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield . set ( obj , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠAssertionError (" Don 't Ġknow Ġhow Ġto Ġverify Ġ'${ value :: class . simple Name }' ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠOpenAPI . check Errors () Ġ= ĠOpenAPI Matcher (). match ( this , Ġnew Open API ()) ĊĊĠĠĠ Ġ@ Suppress (" Long Method ") ĊĠĠĠ Ġinternal Ġfun Ġnew Open API () Ġ= ĠOpenAPI ( ĊĠĠĠĠĠĠĠ Ġversion Ġ= Ġ" string ", ĊĠĠĠĠĠĠĠ Ġpaths Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPath ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath Ġ= Ġ" string ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoperations Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOperation ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Ġ= Ġ" string ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponses Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcode Ġ= Ġ" string ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMediaType ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcontentType Ġ= Ġ" string ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġschema Ġ= Ġempty Schema () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" string ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheaders Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHeader ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" string ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequired Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeprecated Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġschema Ġ= Ġempty Schema () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Body Ġ= ĠRequest Body ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMediaType ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcontentType Ġ= Ġ" string ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġschema Ġ= ĠSchema ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ" string ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġ" string ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeprecated Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnullable Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġformat Ġ= Ġ" string ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Ġ= Ġ" string ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunique Items Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequired Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" string " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperties Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProperty ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" string ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġschema Ġ= Ġempty Schema () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadditional Properties Ġ= Ġempty Schema (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems Ġ= Ġempty Schema (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenum Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" string " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequired Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameters Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParameter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" string ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinside Ġ= Ġ" string ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequired Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeprecated Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" string ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġschema Ġ= Ġempty Schema () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeprecated Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġcomponents Ġ= Ġnull ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġfun Ġempty Schema (): ĠSchema Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠSchema ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdeprecated Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnullable Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġformat Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġunique Items Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequired Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproperties Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadditional Properties Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenum Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ