package Ġde . z al ando . z ally . rule . z al ando Ċ Ċ import Ġde . z al ando . z ally . core . plus Ċ import Ġde . z al ando . z ally . core . to Esc aped Json Pointer Ċ import Ġde . z al ando . z ally . rule . api . Check Ċ import Ġde . z al ando . z ally . rule . api . Context Ċ import Ġde . z al ando . z ally . rule . api . Rule Ċ import Ġde . z al ando . z ally . rule . api . Severity Ċ import Ġde . z al ando . z ally . rule . api . Violation Ċ import Ġio . swagger . v 3 . o as . models . responses . ApiResponse Ċ Ċ @ Rule ( ĊĠĠĠ Ġrule Set Ġ= ĠZ al ando Rule Set :: class , ĊĠĠĠ Ġid Ġ= Ġ" 1 5 3 ", ĊĠĠĠ Ġseverity Ġ= ĠSeverity . MUST , ĊĠĠĠ Ġtitle Ġ= Ġ" Use Ġ 4 2 9 ĠWith ĠHeader ĠFor ĠRate ĠLim its " Ċ ) Ċ class ĠUse 4 2 9 Header For RateLimit Rule Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġdescription Ġ= Ġ" Response Ġhas Ġto Ġcontain Ġrate Ġlimit Ġinformation Ġvia Ġheaders " ĊĠĠĠ Ġprivate Ġval Ġx RateLimit Headers Ġ= ĠlistOf (" X - RateLimit - Limit ", Ġ" X - RateLimit - Remaining ", Ġ" X - RateLimit - Reset ") ĊĊĠĠĠ Ġ@ Check ( severity Ġ= ĠSeverity . MUST ) ĊĠĠĠ Ġfun Ġcheck Headers For RateLimit ing ( context : ĠContext ): ĠList < Violation > Ġ= ĊĠĠĠĠĠĠĠ Ġcontext . validate Operations Ġ{ Ġ(_, Ġoperation ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoperation ?. responses ?. let Ġ{ Ġresponses Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponses ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġviol ating Response ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġ( status , Ġ_) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . vi olations ( description , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . get Json Pointer ( responses ) Ġ+ Ġstatus . to Esc aped Json Pointer ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. or Empty () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġviol ating Response ( entry : ĠMap . Entry < String , ĠApiResponse ?> ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġheaders Ġ= Ġentry . value ?. headers . or Empty (). keys ĊĠĠĠĠĠĠĠ Ġreturn Ġ" 4 2 9 " Ġ== Ġentry . key Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Retry - After " Ġ! in Ġheaders Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ! headers . contains All ( x RateLimit Headers ) ĊĠĠĠ Ġ} Ċ } Ċ