/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠGoogle ĠLLC . Ċ Ġ* Ċ Ġ* ĠThis Ġcode Ġmay Ġonly Ġbe Ġused Ġunder Ġthe ĠBSD Ġstyle Ġlicense Ġfound Ġat Ċ Ġ* Ġhttp :// polymer . github . io / LICENSE . txt Ċ Ġ* Ċ Ġ* ĠCode Ġdistributed Ġby ĠGoogle Ġas Ġpart Ġof Ġthis Ġproject Ġis Ġalso Ġsubject Ġto Ġan Ġadditional ĠIP Ġrights Ċ Ġ* Ġgrant Ġfound Ġat Ċ Ġ* Ġhttp :// polymer . github . io / PAT ENTS . txt Ċ Ġ*/ Ċ Ċ package Ġar cs . core . data . proto Ċ Ċ import Ġar cs . core . data . Check Ċ import Ġar cs . core . data . Handle Connection Spec Ċ import Ġar cs . core . data . Handle Mode Ċ import Ġar cs . core . data . Particle Spec Ċ Ċ type alias ĠDirection Proto Ġ= ĠHandle Connection Spec Proto . Direction Ċ Ċ /** ĠConverts Ġ[ Handle Connection Spec Proto . Direction ] Ġto Ġ[ Handle Mode ]. Ġ*/ Ċ fun ĠDirection Proto . decode () Ġ= ĊĠĠĠ Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠ ĠDirection Proto . UNSPECIFIED Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Direction Ġnot Ġset Ġin Ġ[ Handle Connection Spec ]") ĊĠĠĠĠĠĠĠ ĠDirection Proto . READ S Ġ-> ĠHandle Mode . Read ĊĠĠĠĠĠĠĠ ĠDirection Proto . WR ITES Ġ-> ĠHandle Mode . Write ĊĠĠĠĠĠĠĠ ĠDirection Proto . READ S _ WR ITES Ġ-> ĠHandle Mode . ReadWrite ĊĠĠĠĠĠĠĠ ĠDirection Proto . UN RE CO GN IZED Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Invalid Ġdirection Ġwhen Ġdecoding Ġ[ Handle Connection Spec ]") ĊĠĠĠ Ġ} Ċ Ċ /** ĠConverts Ġa Ġ[ Handle Conn nection Spec Proto ] Ġto Ġthe Ġcorresponding Ġ[ Handle Connection Spec ] Ġinstance . Ġ*/ Ċ fun ĠHandle Connection Spec Proto . decode () Ġ= ĠHandle Connection Spec ( ĊĠĠĠ Ġname Ġ= Ġname , ĊĠĠĠ Ġdirection Ġ= Ġdirection . decode (), ĊĠĠĠ Ġtype Ġ= Ġtype . decode (), ĊĠĠĠ Ġexpression Ġ= Ġexpression . if Empty Ġ{ Ġnull Ġ} Ċ ) Ċ Ċ /** ĠConverts Ġa Ġ[ Particle Spec Proto ] Ġto Ġthe Ġcorresponding Ġ[ Particle Spec ] Ġinstance . Ġ*/ Ċ fun ĠParticle Spec Proto . decode (): ĠParticle Spec Ġ{ ĊĠĠĠ Ġval Ġconnections Ġ= Ġmutable Map Of < String , ĠHandle Connection Spec >() ĊĠĠĠ Ġconnections List . forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠoldValue Ġ= Ġconnections . put ( it . name , Ġit . decode ()) ĊĠĠĠĠĠĠĠ Ġrequire ( oldValue Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Duplicate Ġconnection Ġ'${ it . name }' Ġwhen Ġdecoding ĠParticle Spec Proto Ġ'$ name '" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġclaims Ġ= Ġclaims List . map Ġ{ Ġit . decode ( connections ) Ġ} ĊĠĠĠ Ġval Ġchecks Ġ= Ġchecks List . map Ġ{ ĊĠĠĠĠĠĠĠ ĠCheck . Assert ( it . access Path . decode ( connections ), Ġit . predicate . decode ()) ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġannotations Ġ= Ġannotations List . map Ġ{ Ġit . decode () Ġ} ĊĠĠĠ Ġreturn ĠParticle Spec ( name , Ġconnections , Ġlocation , Ġclaims , Ġchecks , Ġannotations ) Ċ } Ċ