/* Ċ Ġ* ĠCopyright Ġ 2 0 2 2 ĠExp edia , ĠInc Ċ Ġ* Ċ Ġ* Ġ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 Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttps :// 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 . exp edi ag roup . graphql . server . execution Ċ Ċ import Ġcom . exp edi ag roup . graphql . server . types . GraphQL Response Ċ import Ġcom . exp edi ag roup . graphql . server . types . GraphQL Server Response Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Supervisor Job Ċ import Ġkotlinx . coroutines . coroutine Scope Ċ import Ġkotlin . coroutines . Coroutine Context Ċ import Ġkotlin . coroutines . Empty Coroutine Context Ċ Ċ /** Ċ Ġ* ĠA Ġbasic Ġserver Ġimplementation Ġthat Ġparses Ġthe Ġincoming Ġrequest Ġand Ġreturns Ġa Ġ[ GraphQL Response ]. Ċ Ġ* ĠSub scriptions Ġrequire Ġmore Ġserver - specific Ġdetails Ġand Ġshould Ġbe Ġimplemented Ġseparately . Ċ Ġ*/ Ċ open Ġclass ĠGraphQL Server < Request >( ĊĠĠĠ Ġprivate Ġval Ġrequest Parser : ĠGraphQL Request Parser < Request >, ĊĠĠĠ Ġprivate Ġval Ġcontext Factory : ĠGraphQL Context Factory < *, ĠRequest >, ĊĠĠĠ Ġprivate Ġval Ġrequest Handler : ĠGraphQL RequestHandler Ċ ) Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDefault Ġexecution Ġlogic Ġfor Ġhandling Ġa Ġ[ Request ] Ġand Ġreturning Ġa Ġ[ GraphQL Server Response ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf Ġnull Ġis Ġreturned , Ġthat Ġindicates Ġa Ġproblem Ġparsing Ġthe Ġrequest Ġor Ġcontext . ĊĠĠĠĠ Ġ* ĠIf Ġthe Ġrequest Ġis Ġvalid , Ġa Ġ[ GraphQL Server Response ] Ġshould Ġalways Ġbe Ġreturned . ĊĠĠĠĠ Ġ* ĠIn Ġthe Ġcase Ġof Ġerrors Ġor Ġexceptions , Ġreturn Ġa Ġresponse Ġwith ĠGraph Q LError s Ġpopulated . ĊĠĠĠĠ Ġ* ĠIf Ġyou Ġneed Ġcustom Ġlogic Ġinside Ġthis Ġmethod Ġyou Ġcan Ġoverride Ġthis Ġclass Ġor Ġchoose Ġnot Ġto Ġuse Ġit . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġsuspend Ġfun Ġexecute ( ĊĠĠĠĠĠĠĠ Ġrequest : ĠRequest ĊĠĠĠ Ġ): ĠGraphQL Server Response ? Ġ= ĊĠĠĠĠĠĠĠ Ġcoroutine Scope Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Parser . parse Request ( request )?. let Ġ{ Ġgraph QL Request Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeprecated Context Ġ= Ġcontext Factory . generate Context ( request ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Map Ġ= Ġcontext Factory . generate Context Map ( request ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcustom Coroutine Context Ġ= Ġ( deprecated Context ?. graph QL Coroutine Context () Ġ?: ĠEmpty Coroutine Context ) Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( context Map [ Coroutine Context :: class ] Ġas ? ĠCor outine Context Ġ?: ĠEmpty Coroutine Context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgraph QL Execution Scope Ġ= ĠCor outine Scope ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcoroutine Context Ġ+ Ġcustom Coroutine Context Ġ+ ĠSuper visor Job () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgraph QL Context Ġ= Ġcontext Map Ġ+ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCor outine Scope :: class Ġto Ġgraph QL Execution Scope ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Handler . execute Request ( graph QL Request , Ġdeprecated Context , Ġgraph QL Context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ċ } Ċ