package Ġcom . icos illion . pine . middleware Ċ Ċ import Ġcom . icos illion . pine . http . Request Ċ import Ġcom . icos illion . pine . http . Response Ċ Ċ /** Ċ Ġ* ĠInterface Ġfor ĠP ine ĠMiddleware Ċ Ġ*/ Ċ interface ĠMiddleware Ġ{ ĊĠĠĠ Ġfun Ġbefore ( request : ĠRequest , Ġresponse : ĠResponse , Ġnext : ĠMiddleware Chain ): ĠResponse ĊĠĠĠ Ġfun Ġafter ( request : ĠRequest , Ġresponse : ĠResponse , Ġnext : ĠMiddleware Chain ): ĠResponse Ċ } Ċ Ċ /** Ċ Ġ* ĠHelper Ġclass Ġfor Ġsequential Ġmiddleware Ġexecution Ċ Ġ*/ Ċ class ĠMiddleware Chain ( val Ġtype : ĠType , Ġval Ġmiddle wares : ĠList < Middleware >) Ġ{ ĊĊĠĠĠ Ġenum Ġclass ĠType Ġ{ ĊĠĠĠĠĠĠĠ ĠBE FORE , ĠAFTER ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġiterator : ĠIterator < Middleware > ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . iterator Ġ= Ġmiddle wares . iterator () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExec utes Ġthe Ġnext Ġmiddleware Ġitem Ġin Ġthe Ġchain ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġnext ( request : ĠRequest , Ġresponse : ĠResponse ): ĠResponse Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this . iterator . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ== ĠType . BEFORE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis . iterator . next (). before ( request , Ġresponse , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis . iterator . next (). after ( request , Ġresponse , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresponse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠStarts Ġthe Ġexecution Ġof Ġa Ġmiddleware Ġchain ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġstart ( request : ĠRequest , Ġresponse : ĠResponse ): ĠResponse Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . next ( request , Ġresponse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEnables Ġexecution Ġof Ġthis Ġobject Ġas Ġan Ġalias Ġto Ġthe Ġnext Ġcommand ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoperator Ġfun Ġinvoke ( request : ĠRequest , Ġresponse : ĠResponse ): ĠResponse Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . next ( request , Ġresponse ) ĊĠĠĠ Ġ} Ċ }