/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠAr th ur ĠI van ets , Ġar th ur . iv an ets . work @ gmail . com Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . arth ur iv an ets . google play sc raper . util Ċ Ċ import Ġcom . google . gson .* Ċ import Ġjava . math . BigDecimal Ċ import Ġjava . math . BigInteger Ċ Ċ internal Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠAny > ĠMap < String , ĠJson Element >. require ( key : ĠString ): ĠT Ġ{ ĊĠĠĠ Ġreturn Ġthis . getValue ( key ). infer Type () Ċ } Ċ Ċ internal Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠAny > ĠMap < String , ĠJson Element >. get OrDefault ( key : ĠString , ĠdefaultValue : ĠT ): ĠT Ġ{ ĊĠĠĠ Ġreturn Ġget OrNull ( key ) Ġ?: ĠdefaultValue Ċ } Ċ Ċ internal Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠAny > ĠMap < String , ĠJson Element >. get OrNull ( key : ĠString ): ĠT ? Ġ{ ĊĠĠĠ Ġval Ġitem Ġ= Ġthis [ key ] ĊĊĠĠĠ Ġreturn Ġif Ġ(( item Ġis ĠJson Null ) Ġ&& Ġ( T :: class Ġ!= ĠJson Null :: class )) Ġ{ ĊĠĠĠĠĠĠĠ Ġnull ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġitem ?. infer Type () ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠAny > ĠJson Element . infer Type (): ĠT Ġ{ ĊĠĠĠ Ġreturn Ġwhen Ġ( T :: class ) Ġ{ ĊĠĠĠĠĠĠĠ ĠBoolean :: class Ġ-> Ġthis . as Boolean Ġas ĠT ĊĠĠĠĠĠĠĠ ĠString :: class Ġ-> Ġthis . asString Ġas ĠT ĊĠĠĠĠĠĠĠ ĠNumber :: class Ġ-> Ġthis . as Number Ġas ĠT ĊĠĠĠĠĠĠĠ ĠDouble :: class Ġ-> Ġthis . as Double Ġas ĠT ĊĠĠĠĠĠĠĠ ĠFloat :: class Ġ-> Ġthis . as Float Ġas ĠT ĊĠĠĠĠĠĠĠ ĠLong :: class Ġ-> Ġthis . as Long Ġas ĠT ĊĠĠĠĠĠĠĠ ĠInt :: class Ġ-> Ġthis . as Int Ġas ĠT ĊĠĠĠĠĠĠĠ ĠByte :: class Ġ-> Ġthis . as Byte Ġas ĠT ĊĠĠĠĠĠĠĠ ĠShort :: class Ġ-> Ġthis . as Short Ġas ĠT ĊĠĠĠĠĠĠĠ ĠBigDecimal :: class Ġ-> Ġthis . as BigDecimal Ġas ĠT ĊĠĠĠĠĠĠĠ ĠBigInteger :: class Ġ-> Ġthis . as BigInteger Ġas ĠT ĊĠĠĠĠĠĠĠ ĠJson Null :: class Ġ-> Ġthis . as Json Null Ġas ĠT ĊĠĠĠĠĠĠĠ ĠJson Primitive :: class Ġ-> Ġthis . as Json Primitive Ġas ĠT ĊĠĠĠĠĠĠĠ ĠJson Array :: class Ġ-> Ġthis . as JsonArray Ġas ĠT ĊĠĠĠĠĠĠĠ ĠJsonObject :: class Ġ-> Ġthis . as JsonObject Ġas ĠT ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" Unsupported ĠType Ġ= Ġ${ T :: class . qualified Name }") ĊĠĠĠ Ġ} Ċ }