package Ġme . s arg un vo h ra . lib . poke kotlin . util Ċ Ċ import Ġcom . google . gson . Json Deserialization Context Ċ import Ġcom . google . gson . Json Deserializer Ċ import Ġcom . google . gson . Json Element Ċ import Ġcom . google . gson . reflect . Type Token Ċ import Ġme . s arg un vo h ra . lib . poke kotlin . model . Api Resource Ċ import Ġme . s arg un vo h ra . lib . poke kotlin . model . Named Api Resource Ċ import Ġjava . lang . reflect . Type Ċ Ċ private Ġfun Ġurl To Id ( url : ĠString ): ĠInt Ġ{ ĊĠĠĠ Ġreturn Ġ"\\ /- ?[ 0 - 9 ]+ \\ /$ ". to Regex (). find ( url ) !!. value . filter Ġ{ Ġit . is Digit () Ġ|| Ġit Ġ== Ġ'-' Ġ}. toInt () Ċ } Ċ Ċ private Ġfun Ġurl To Cat ( url : ĠString ): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġ"\\ /[ a - z \\ - ]+ \\ /- ?[ 0 - 9 ]+ \\ /$ ". to Regex (). find ( url ) !!. value . filter Ġ{ Ġit . is Letter () Ġ|| Ġit Ġ== Ġ'-' Ġ} Ċ } Ċ Ċ internal Ġclass ĠApi Resource Adapter Ġ: ĠJson Deserializer < Api Resource > Ġ{ ĊĊĠĠĠ Ġdata Ġclass ĠJson ( val Ġurl : ĠString ) ĊĊĠĠĠ Ġoverride Ġfun Ġdeserialize ( element : ĠJson Element , Ġtype : ĠType , Ġcontext : ĠJson Deserialization Context ): ĠApi Resource Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtemp Ġ= Ġcontext . deserialize < Json >( element , ĠType Token . get ( Json :: class . java ). type ) ĊĠĠĠĠĠĠĠ Ġreturn ĠApi Resource ( category Ġ= Ġurl To Cat ( temp . url ), Ġid Ġ= Ġurl To Id ( temp . url )) ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġclass ĠNamed Api Resource Adapter Ġ: ĠJson Deserializer < Named Api Resource > Ġ{ ĊĊĠĠĠ Ġdata Ġclass ĠJson ( val Ġname : ĠString , Ġval Ġurl : ĠString ) ĊĊĠĠĠ Ġoverride Ġfun Ġdeserialize ( element : ĠJson Element , Ġtype : ĠType , Ġcontext : ĠJson Deserialization Context ): ĠNamed Api Resource Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtemp Ġ= Ġcontext . deserialize < Json >( element , ĠType Token . get ( Json :: class . java ). type ) ĊĠĠĠĠĠĠĠ Ġreturn ĠNamed Api Resource ( name Ġ= Ġtemp . name , Ġcategory Ġ= Ġurl To Cat ( temp . url ), Ġid Ġ= Ġurl To Id ( temp . url )) ĊĠĠĠ Ġ} Ċ }