package Ġorg . wikipedia . json Ċ Ċ import Ġcom . google . gson . Json ParseException Ċ import Ġcom . google . gson . Type Adapter Ċ import Ġcom . google . gson . stream . Json Reader Ċ import Ġcom . google . gson . stream . Json Writer Ċ import Ġorg . wikipedia . datac lient . Wiki Site Ċ import Ġjava . io . IOException Ċ Ċ class ĠWiki Site Type Adapter Ġ: ĠType Adapter < Wiki Site >() Ġ{ ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġoverride Ġfun Ġwrite ( writer : ĠJson Writer , Ġvalue : ĠWiki Site ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwriter . begin Object () ĊĠĠĠĠĠĠĠ Ġwriter . name ( DOMAIN ) ĊĠĠĠĠĠĠĠ Ġwriter . value ( value . url ()) ĊĠĠĠĠĠĠĠ Ġwriter . name ( LANGUAGE _ CODE ) ĊĠĠĠĠĠĠĠ Ġwriter . value ( value . language Code ()) ĊĠĠĠĠĠĠĠ Ġwriter . end Object () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġoverride Ġfun Ġread ( reader : ĠJson Reader ): ĠWiki Site Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġdomain : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġlanguage Code : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġreader . begin Object () ĊĠĠĠĠĠĠĠ Ġwhile Ġ( reader . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfield Ġ= Ġreader . next Name () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġreader . next String () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( field ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDO MAIN Ġ-> Ġdomain Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLANGUAGE _ CODE Ġ-> Ġlanguage Code Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreader . end Object () ĊĠĠĠĠĠĠĠ Ġif Ġ( domain . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠJson ParseException (" Missing Ġdomain ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġlanguage Code ?. let Ġ{ ĠWiki Site ( domain , Ġit ) Ġ} Ġ?: ĠWiki Site ( domain ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDO MAIN Ġ= Ġ" domain " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠLANGUAGE _ CODE Ġ= Ġ" language Code " ĊĠĠĠ Ġ} Ċ } Ċ