package Ġcom . seat ge ek . json schema 2 kotlin . writer . kotlin . interceptor Ċ Ċ import Ġcom . seat ge ek . json schema 2 kotlin . interceptor . Data Class Interceptor Ċ import Ġcom . squareup . kotlin po et . Type Spec Ċ import Ġnet . j im black ler . json schema friend . Schema Ċ Ċ /** Ċ Ġ* ĠPro duces Ġclass Ġnames Ġwhich Ġshould Ġbe Ġsafe Ġfor Ġuse Ġwith ĠKotlin Ċ Ġ*/ Ċ internal Ġobject ĠSafe ClassName Interceptor Ġ: ĠData Class Interceptor Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġdis allowed Character Regex Ġ= Ġ"[ ^ A - Za - z 0 - 9 ]+ ". to Regex () ĊĊĠĠĠ Ġoverride Ġfun Ġintercept ( schema : ĠSchema , Ġtype Spec : ĠType Spec ): ĠType Spec Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠclassName Ġ= Ġrequire NotNull ( type Spec . name ) Ġ{ Ġ" Data Ġclasses Ġare Ġall Ġexpected Ġto Ġhave Ġa Ġname " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRemove Ġbad Ġcharacters ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ( dis allowed Character Regex , Ġ" Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUpper cases Ġnew Ġwords ' Ġfirst Ġletter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . toCharArray (). map Indexed Ġ{ Ġindex , Ġc Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUpper case Ġeverything Ġafter Ġreplaced Ġbad Ġchars Ġfor ĠUpper Camel Case ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ== Ġ 0 Ġ|| Ġit [ index Ġ- Ġ 1 ] Ġ== Ġ' Ġ') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . uppercase Char () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. join ToString ("") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. replace (" Ġ", Ġ"") ĊĊĊĠĠĠĠĠĠĠ Ġreturn Ġtype Spec . to Builder ( name Ġ= ĠclassName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} Ċ }