package Ġcom . pap sign . ktor . open ap igen . interop Ċ Ċ import Ġcom . pap sign . ktor . open ap igen . exception . API Exception . Companion . api Exception Ċ import Ġcom . pap sign . ktor . open ap igen . Open API Gen Ċ import Ġcom . pap sign . ktor . open ap igen . modules . register Module Ċ import Ġcom . pap sign . ktor . open ap igen . route . Throws Info Ċ import Ġio . ktor . application . call Ċ import Ġio . ktor . features . Status Pages Ċ import Ġio . ktor . http . HttpStatusCode Ċ import Ġio . ktor . response . respond Ċ Ċ /** Ċ Ġ* ĠWrap s Ġ[ Status Pages . Configuration ] Ġto Ġenable ĠOpenAPI Ġconfiguration Ġfor Ġexception Ġhandling . Ċ Ġ* Ġ``` Ċ Ġ* Ġ Ġval Ġapi Ġ= Ġinstall ( Open API Gen ) Ġ Ġ{ Ġ... Ġ} Ċ Ġ* Ġ Ġ... Ċ Ġ* Ġ Ġ// ĠStatus Page Ġinter op , Ġcan Ġalso Ġdefine Ġexceptions Ġper - route Ċ Ġ* Ġ Ġinstall ( Status Pages ) Ġ{ Ċ Ġ* ĠĠĠĠĠ Ġwith API ( api ) Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠĠ Ġexception < Json Mapping Exception , ĠError >( HttpStatusCode . BadRequest ) Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . printStackTrace () Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠError (" mapping . json ", Ġit . localized Message ) Ċ Ġ* ĠĠĠĠĠĠĠĠĠ Ġ} Ċ Ġ* ĠĠĠĠĠĠĠĠĠ Ġexception < Pro per Exception , ĠError >( HttpStatusCode . BadRequest ) Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . printStackTrace () Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠError ( it . id , Ġit . localized Message ) Ċ Ġ* ĠĠĠĠĠĠĠĠĠ Ġ} Ċ Ġ* ĠĠĠĠĠ Ġ} Ċ Ġ* Ġ Ġ} Ċ Ġ* Ġ``` Ċ Ġ* Ċ Ġ* Ġ@ param Ġapi Ġthe Ġinstalled Ġinstance Ġof Ġ[ Open API Gen ] Ġin Ġthe Ġ[ io . ktor . application . Application ] Ċ Ġ* Ġ@ param Ġcfg Ġthe Ġblock Ġthat Ġloads Ġthe Ġconfiguration , Ġsee Ġ[ Open API Gen Status Pages Interop ] Ċ Ġ*/ Ċ inline Ġfun ĠStatus Pages . Configuration . with API ( api : ĠOpenAPI Gen , Ġcross inline Ġcfg : ĠOpenAPI Gen Status Pages Interop . () Ġ-> ĠUnit Ġ= Ġ{}) Ġ{ ĊĠĠĠ ĠOpenAPI Gen Status Pages Interop ( api , Ġthis ). cfg () Ċ } Ċ Ċ /** Ċ Ġ* ĠWrapper Ġfor ĠStatus Ġpages Ġthat Ġhandles Ġexceptions Ġand Ġgenerates Ġdocumentation Ġin ĠOpenAPI . Ċ Ġ* ĠThis Ġis Ġuseful Ġfor Ġdefault Ġerror Ġpages . Ċ Ġ*/ Ċ class ĠOpenAPI Gen Status Pages Interop ( val Ġapi : ĠOpenAPI Gen , Ġval Ġstatus Cfg : ĠStatus Pages . Configuration ) Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRegisters Ġa Ġhandler Ġfor Ġexception Ġtype Ġ[ T Throwable ] Ġand Ġreturns Ġa Ġ[ status ] Ġpage ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠT Throwable Ġ: ĠThrowable > Ġexception ( status : ĠHttpStatusCode ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġex Ġ= Ġapi Exception < T Throwable , ĠUnit >( status ) ĊĠĠĠĠĠĠĠ Ġapi . global Module Provider . register Module ( Throws Info ( listOf ( ex ))) ĊĠĠĠĠĠĠĠ Ġstatus Cfg . exception < T Throwable > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( status ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRegisters Ġa Ġhandler Ġfor Ġexception Ġtype Ġ[ T Throwable ] Ġand Ġreturns Ġa Ġ[ status ] Ġpage Ġthat Ġincludes Ġa Ġresponse Ġbody ĊĠĠĠĠ Ġ* Ġof Ġtype Ġ[ T Response ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġexample ĠAn Ġexample Ġof Ġthe Ġresponse Ġbody ĊĠĠĠĠ Ġ* Ġ@ param Ġgen Ġhandler Ġfor Ġ[ T Throwable ] Ġthat Ġshould Ġreturn Ġan Ġinstance Ġof Ġ[ T Response ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠT Throwable Ġ: ĠThrowable , Ġre ified ĠT Response > Ġexception ( status : ĠHttpStatusCode , Ġexample : ĠT Response ? Ġ= Ġnull , Ġno inline Ġgen : Ġ( T Throwable ) Ġ-> ĠT Response ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġex Ġ= Ġapi Exception ( status , Ġexample , Ġgen ) ĊĠĠĠĠĠĠĠ Ġapi . global Module Provider . register Module ( Throws Info ( listOf ( ex ))) ĊĠĠĠĠĠĠĠ Ġstatus Cfg . exception < T Throwable > Ġ{ Ġt Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġret Ġ= Ġgen ( t ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ret Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( status , Ġret ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( status ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ