1
0
mirror of https://github.com/actix/actix-website synced 2024-11-28 18:32:39 +01:00
actix-website/static/api/actix-web/0.7.2/src/actix_web/error.rs.html
2018-07-26 10:53:41 -07:00

2245 lines
154 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source to the Rust file `src/error.rs`."><meta name="keywords" content="rust, rustlang, rust-lang"><title>error.rs.html -- source</title><link rel="stylesheet" type="text/css" href="../../normalize.css"><link rel="stylesheet" type="text/css" href="../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../../dark.css"><link rel="stylesheet" type="text/css" href="../../light.css" id="themeStyle"><script src="../../storage.js"></script></head><body class="rustdoc source"><!--[if lte IE 8]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu">&#9776;</div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!"><img src="../../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices"></div></div><script src="../../theme.js"></script><nav class="sub"><form class="search-form js-only"><div class="search-container"><input class="search-input" name="search" autocomplete="off" placeholder="Click or press S to search, ? for more options…" type="search"><a id="settings-menu" href="../../settings.html"><img src="../../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><pre class="line-numbers"><span id="1"> 1</span>
<span id="2"> 2</span>
<span id="3"> 3</span>
<span id="4"> 4</span>
<span id="5"> 5</span>
<span id="6"> 6</span>
<span id="7"> 7</span>
<span id="8"> 8</span>
<span id="9"> 9</span>
<span id="10"> 10</span>
<span id="11"> 11</span>
<span id="12"> 12</span>
<span id="13"> 13</span>
<span id="14"> 14</span>
<span id="15"> 15</span>
<span id="16"> 16</span>
<span id="17"> 17</span>
<span id="18"> 18</span>
<span id="19"> 19</span>
<span id="20"> 20</span>
<span id="21"> 21</span>
<span id="22"> 22</span>
<span id="23"> 23</span>
<span id="24"> 24</span>
<span id="25"> 25</span>
<span id="26"> 26</span>
<span id="27"> 27</span>
<span id="28"> 28</span>
<span id="29"> 29</span>
<span id="30"> 30</span>
<span id="31"> 31</span>
<span id="32"> 32</span>
<span id="33"> 33</span>
<span id="34"> 34</span>
<span id="35"> 35</span>
<span id="36"> 36</span>
<span id="37"> 37</span>
<span id="38"> 38</span>
<span id="39"> 39</span>
<span id="40"> 40</span>
<span id="41"> 41</span>
<span id="42"> 42</span>
<span id="43"> 43</span>
<span id="44"> 44</span>
<span id="45"> 45</span>
<span id="46"> 46</span>
<span id="47"> 47</span>
<span id="48"> 48</span>
<span id="49"> 49</span>
<span id="50"> 50</span>
<span id="51"> 51</span>
<span id="52"> 52</span>
<span id="53"> 53</span>
<span id="54"> 54</span>
<span id="55"> 55</span>
<span id="56"> 56</span>
<span id="57"> 57</span>
<span id="58"> 58</span>
<span id="59"> 59</span>
<span id="60"> 60</span>
<span id="61"> 61</span>
<span id="62"> 62</span>
<span id="63"> 63</span>
<span id="64"> 64</span>
<span id="65"> 65</span>
<span id="66"> 66</span>
<span id="67"> 67</span>
<span id="68"> 68</span>
<span id="69"> 69</span>
<span id="70"> 70</span>
<span id="71"> 71</span>
<span id="72"> 72</span>
<span id="73"> 73</span>
<span id="74"> 74</span>
<span id="75"> 75</span>
<span id="76"> 76</span>
<span id="77"> 77</span>
<span id="78"> 78</span>
<span id="79"> 79</span>
<span id="80"> 80</span>
<span id="81"> 81</span>
<span id="82"> 82</span>
<span id="83"> 83</span>
<span id="84"> 84</span>
<span id="85"> 85</span>
<span id="86"> 86</span>
<span id="87"> 87</span>
<span id="88"> 88</span>
<span id="89"> 89</span>
<span id="90"> 90</span>
<span id="91"> 91</span>
<span id="92"> 92</span>
<span id="93"> 93</span>
<span id="94"> 94</span>
<span id="95"> 95</span>
<span id="96"> 96</span>
<span id="97"> 97</span>
<span id="98"> 98</span>
<span id="99"> 99</span>
<span id="100"> 100</span>
<span id="101"> 101</span>
<span id="102"> 102</span>
<span id="103"> 103</span>
<span id="104"> 104</span>
<span id="105"> 105</span>
<span id="106"> 106</span>
<span id="107"> 107</span>
<span id="108"> 108</span>
<span id="109"> 109</span>
<span id="110"> 110</span>
<span id="111"> 111</span>
<span id="112"> 112</span>
<span id="113"> 113</span>
<span id="114"> 114</span>
<span id="115"> 115</span>
<span id="116"> 116</span>
<span id="117"> 117</span>
<span id="118"> 118</span>
<span id="119"> 119</span>
<span id="120"> 120</span>
<span id="121"> 121</span>
<span id="122"> 122</span>
<span id="123"> 123</span>
<span id="124"> 124</span>
<span id="125"> 125</span>
<span id="126"> 126</span>
<span id="127"> 127</span>
<span id="128"> 128</span>
<span id="129"> 129</span>
<span id="130"> 130</span>
<span id="131"> 131</span>
<span id="132"> 132</span>
<span id="133"> 133</span>
<span id="134"> 134</span>
<span id="135"> 135</span>
<span id="136"> 136</span>
<span id="137"> 137</span>
<span id="138"> 138</span>
<span id="139"> 139</span>
<span id="140"> 140</span>
<span id="141"> 141</span>
<span id="142"> 142</span>
<span id="143"> 143</span>
<span id="144"> 144</span>
<span id="145"> 145</span>
<span id="146"> 146</span>
<span id="147"> 147</span>
<span id="148"> 148</span>
<span id="149"> 149</span>
<span id="150"> 150</span>
<span id="151"> 151</span>
<span id="152"> 152</span>
<span id="153"> 153</span>
<span id="154"> 154</span>
<span id="155"> 155</span>
<span id="156"> 156</span>
<span id="157"> 157</span>
<span id="158"> 158</span>
<span id="159"> 159</span>
<span id="160"> 160</span>
<span id="161"> 161</span>
<span id="162"> 162</span>
<span id="163"> 163</span>
<span id="164"> 164</span>
<span id="165"> 165</span>
<span id="166"> 166</span>
<span id="167"> 167</span>
<span id="168"> 168</span>
<span id="169"> 169</span>
<span id="170"> 170</span>
<span id="171"> 171</span>
<span id="172"> 172</span>
<span id="173"> 173</span>
<span id="174"> 174</span>
<span id="175"> 175</span>
<span id="176"> 176</span>
<span id="177"> 177</span>
<span id="178"> 178</span>
<span id="179"> 179</span>
<span id="180"> 180</span>
<span id="181"> 181</span>
<span id="182"> 182</span>
<span id="183"> 183</span>
<span id="184"> 184</span>
<span id="185"> 185</span>
<span id="186"> 186</span>
<span id="187"> 187</span>
<span id="188"> 188</span>
<span id="189"> 189</span>
<span id="190"> 190</span>
<span id="191"> 191</span>
<span id="192"> 192</span>
<span id="193"> 193</span>
<span id="194"> 194</span>
<span id="195"> 195</span>
<span id="196"> 196</span>
<span id="197"> 197</span>
<span id="198"> 198</span>
<span id="199"> 199</span>
<span id="200"> 200</span>
<span id="201"> 201</span>
<span id="202"> 202</span>
<span id="203"> 203</span>
<span id="204"> 204</span>
<span id="205"> 205</span>
<span id="206"> 206</span>
<span id="207"> 207</span>
<span id="208"> 208</span>
<span id="209"> 209</span>
<span id="210"> 210</span>
<span id="211"> 211</span>
<span id="212"> 212</span>
<span id="213"> 213</span>
<span id="214"> 214</span>
<span id="215"> 215</span>
<span id="216"> 216</span>
<span id="217"> 217</span>
<span id="218"> 218</span>
<span id="219"> 219</span>
<span id="220"> 220</span>
<span id="221"> 221</span>
<span id="222"> 222</span>
<span id="223"> 223</span>
<span id="224"> 224</span>
<span id="225"> 225</span>
<span id="226"> 226</span>
<span id="227"> 227</span>
<span id="228"> 228</span>
<span id="229"> 229</span>
<span id="230"> 230</span>
<span id="231"> 231</span>
<span id="232"> 232</span>
<span id="233"> 233</span>
<span id="234"> 234</span>
<span id="235"> 235</span>
<span id="236"> 236</span>
<span id="237"> 237</span>
<span id="238"> 238</span>
<span id="239"> 239</span>
<span id="240"> 240</span>
<span id="241"> 241</span>
<span id="242"> 242</span>
<span id="243"> 243</span>
<span id="244"> 244</span>
<span id="245"> 245</span>
<span id="246"> 246</span>
<span id="247"> 247</span>
<span id="248"> 248</span>
<span id="249"> 249</span>
<span id="250"> 250</span>
<span id="251"> 251</span>
<span id="252"> 252</span>
<span id="253"> 253</span>
<span id="254"> 254</span>
<span id="255"> 255</span>
<span id="256"> 256</span>
<span id="257"> 257</span>
<span id="258"> 258</span>
<span id="259"> 259</span>
<span id="260"> 260</span>
<span id="261"> 261</span>
<span id="262"> 262</span>
<span id="263"> 263</span>
<span id="264"> 264</span>
<span id="265"> 265</span>
<span id="266"> 266</span>
<span id="267"> 267</span>
<span id="268"> 268</span>
<span id="269"> 269</span>
<span id="270"> 270</span>
<span id="271"> 271</span>
<span id="272"> 272</span>
<span id="273"> 273</span>
<span id="274"> 274</span>
<span id="275"> 275</span>
<span id="276"> 276</span>
<span id="277"> 277</span>
<span id="278"> 278</span>
<span id="279"> 279</span>
<span id="280"> 280</span>
<span id="281"> 281</span>
<span id="282"> 282</span>
<span id="283"> 283</span>
<span id="284"> 284</span>
<span id="285"> 285</span>
<span id="286"> 286</span>
<span id="287"> 287</span>
<span id="288"> 288</span>
<span id="289"> 289</span>
<span id="290"> 290</span>
<span id="291"> 291</span>
<span id="292"> 292</span>
<span id="293"> 293</span>
<span id="294"> 294</span>
<span id="295"> 295</span>
<span id="296"> 296</span>
<span id="297"> 297</span>
<span id="298"> 298</span>
<span id="299"> 299</span>
<span id="300"> 300</span>
<span id="301"> 301</span>
<span id="302"> 302</span>
<span id="303"> 303</span>
<span id="304"> 304</span>
<span id="305"> 305</span>
<span id="306"> 306</span>
<span id="307"> 307</span>
<span id="308"> 308</span>
<span id="309"> 309</span>
<span id="310"> 310</span>
<span id="311"> 311</span>
<span id="312"> 312</span>
<span id="313"> 313</span>
<span id="314"> 314</span>
<span id="315"> 315</span>
<span id="316"> 316</span>
<span id="317"> 317</span>
<span id="318"> 318</span>
<span id="319"> 319</span>
<span id="320"> 320</span>
<span id="321"> 321</span>
<span id="322"> 322</span>
<span id="323"> 323</span>
<span id="324"> 324</span>
<span id="325"> 325</span>
<span id="326"> 326</span>
<span id="327"> 327</span>
<span id="328"> 328</span>
<span id="329"> 329</span>
<span id="330"> 330</span>
<span id="331"> 331</span>
<span id="332"> 332</span>
<span id="333"> 333</span>
<span id="334"> 334</span>
<span id="335"> 335</span>
<span id="336"> 336</span>
<span id="337"> 337</span>
<span id="338"> 338</span>
<span id="339"> 339</span>
<span id="340"> 340</span>
<span id="341"> 341</span>
<span id="342"> 342</span>
<span id="343"> 343</span>
<span id="344"> 344</span>
<span id="345"> 345</span>
<span id="346"> 346</span>
<span id="347"> 347</span>
<span id="348"> 348</span>
<span id="349"> 349</span>
<span id="350"> 350</span>
<span id="351"> 351</span>
<span id="352"> 352</span>
<span id="353"> 353</span>
<span id="354"> 354</span>
<span id="355"> 355</span>
<span id="356"> 356</span>
<span id="357"> 357</span>
<span id="358"> 358</span>
<span id="359"> 359</span>
<span id="360"> 360</span>
<span id="361"> 361</span>
<span id="362"> 362</span>
<span id="363"> 363</span>
<span id="364"> 364</span>
<span id="365"> 365</span>
<span id="366"> 366</span>
<span id="367"> 367</span>
<span id="368"> 368</span>
<span id="369"> 369</span>
<span id="370"> 370</span>
<span id="371"> 371</span>
<span id="372"> 372</span>
<span id="373"> 373</span>
<span id="374"> 374</span>
<span id="375"> 375</span>
<span id="376"> 376</span>
<span id="377"> 377</span>
<span id="378"> 378</span>
<span id="379"> 379</span>
<span id="380"> 380</span>
<span id="381"> 381</span>
<span id="382"> 382</span>
<span id="383"> 383</span>
<span id="384"> 384</span>
<span id="385"> 385</span>
<span id="386"> 386</span>
<span id="387"> 387</span>
<span id="388"> 388</span>
<span id="389"> 389</span>
<span id="390"> 390</span>
<span id="391"> 391</span>
<span id="392"> 392</span>
<span id="393"> 393</span>
<span id="394"> 394</span>
<span id="395"> 395</span>
<span id="396"> 396</span>
<span id="397"> 397</span>
<span id="398"> 398</span>
<span id="399"> 399</span>
<span id="400"> 400</span>
<span id="401"> 401</span>
<span id="402"> 402</span>
<span id="403"> 403</span>
<span id="404"> 404</span>
<span id="405"> 405</span>
<span id="406"> 406</span>
<span id="407"> 407</span>
<span id="408"> 408</span>
<span id="409"> 409</span>
<span id="410"> 410</span>
<span id="411"> 411</span>
<span id="412"> 412</span>
<span id="413"> 413</span>
<span id="414"> 414</span>
<span id="415"> 415</span>
<span id="416"> 416</span>
<span id="417"> 417</span>
<span id="418"> 418</span>
<span id="419"> 419</span>
<span id="420"> 420</span>
<span id="421"> 421</span>
<span id="422"> 422</span>
<span id="423"> 423</span>
<span id="424"> 424</span>
<span id="425"> 425</span>
<span id="426"> 426</span>
<span id="427"> 427</span>
<span id="428"> 428</span>
<span id="429"> 429</span>
<span id="430"> 430</span>
<span id="431"> 431</span>
<span id="432"> 432</span>
<span id="433"> 433</span>
<span id="434"> 434</span>
<span id="435"> 435</span>
<span id="436"> 436</span>
<span id="437"> 437</span>
<span id="438"> 438</span>
<span id="439"> 439</span>
<span id="440"> 440</span>
<span id="441"> 441</span>
<span id="442"> 442</span>
<span id="443"> 443</span>
<span id="444"> 444</span>
<span id="445"> 445</span>
<span id="446"> 446</span>
<span id="447"> 447</span>
<span id="448"> 448</span>
<span id="449"> 449</span>
<span id="450"> 450</span>
<span id="451"> 451</span>
<span id="452"> 452</span>
<span id="453"> 453</span>
<span id="454"> 454</span>
<span id="455"> 455</span>
<span id="456"> 456</span>
<span id="457"> 457</span>
<span id="458"> 458</span>
<span id="459"> 459</span>
<span id="460"> 460</span>
<span id="461"> 461</span>
<span id="462"> 462</span>
<span id="463"> 463</span>
<span id="464"> 464</span>
<span id="465"> 465</span>
<span id="466"> 466</span>
<span id="467"> 467</span>
<span id="468"> 468</span>
<span id="469"> 469</span>
<span id="470"> 470</span>
<span id="471"> 471</span>
<span id="472"> 472</span>
<span id="473"> 473</span>
<span id="474"> 474</span>
<span id="475"> 475</span>
<span id="476"> 476</span>
<span id="477"> 477</span>
<span id="478"> 478</span>
<span id="479"> 479</span>
<span id="480"> 480</span>
<span id="481"> 481</span>
<span id="482"> 482</span>
<span id="483"> 483</span>
<span id="484"> 484</span>
<span id="485"> 485</span>
<span id="486"> 486</span>
<span id="487"> 487</span>
<span id="488"> 488</span>
<span id="489"> 489</span>
<span id="490"> 490</span>
<span id="491"> 491</span>
<span id="492"> 492</span>
<span id="493"> 493</span>
<span id="494"> 494</span>
<span id="495"> 495</span>
<span id="496"> 496</span>
<span id="497"> 497</span>
<span id="498"> 498</span>
<span id="499"> 499</span>
<span id="500"> 500</span>
<span id="501"> 501</span>
<span id="502"> 502</span>
<span id="503"> 503</span>
<span id="504"> 504</span>
<span id="505"> 505</span>
<span id="506"> 506</span>
<span id="507"> 507</span>
<span id="508"> 508</span>
<span id="509"> 509</span>
<span id="510"> 510</span>
<span id="511"> 511</span>
<span id="512"> 512</span>
<span id="513"> 513</span>
<span id="514"> 514</span>
<span id="515"> 515</span>
<span id="516"> 516</span>
<span id="517"> 517</span>
<span id="518"> 518</span>
<span id="519"> 519</span>
<span id="520"> 520</span>
<span id="521"> 521</span>
<span id="522"> 522</span>
<span id="523"> 523</span>
<span id="524"> 524</span>
<span id="525"> 525</span>
<span id="526"> 526</span>
<span id="527"> 527</span>
<span id="528"> 528</span>
<span id="529"> 529</span>
<span id="530"> 530</span>
<span id="531"> 531</span>
<span id="532"> 532</span>
<span id="533"> 533</span>
<span id="534"> 534</span>
<span id="535"> 535</span>
<span id="536"> 536</span>
<span id="537"> 537</span>
<span id="538"> 538</span>
<span id="539"> 539</span>
<span id="540"> 540</span>
<span id="541"> 541</span>
<span id="542"> 542</span>
<span id="543"> 543</span>
<span id="544"> 544</span>
<span id="545"> 545</span>
<span id="546"> 546</span>
<span id="547"> 547</span>
<span id="548"> 548</span>
<span id="549"> 549</span>
<span id="550"> 550</span>
<span id="551"> 551</span>
<span id="552"> 552</span>
<span id="553"> 553</span>
<span id="554"> 554</span>
<span id="555"> 555</span>
<span id="556"> 556</span>
<span id="557"> 557</span>
<span id="558"> 558</span>
<span id="559"> 559</span>
<span id="560"> 560</span>
<span id="561"> 561</span>
<span id="562"> 562</span>
<span id="563"> 563</span>
<span id="564"> 564</span>
<span id="565"> 565</span>
<span id="566"> 566</span>
<span id="567"> 567</span>
<span id="568"> 568</span>
<span id="569"> 569</span>
<span id="570"> 570</span>
<span id="571"> 571</span>
<span id="572"> 572</span>
<span id="573"> 573</span>
<span id="574"> 574</span>
<span id="575"> 575</span>
<span id="576"> 576</span>
<span id="577"> 577</span>
<span id="578"> 578</span>
<span id="579"> 579</span>
<span id="580"> 580</span>
<span id="581"> 581</span>
<span id="582"> 582</span>
<span id="583"> 583</span>
<span id="584"> 584</span>
<span id="585"> 585</span>
<span id="586"> 586</span>
<span id="587"> 587</span>
<span id="588"> 588</span>
<span id="589"> 589</span>
<span id="590"> 590</span>
<span id="591"> 591</span>
<span id="592"> 592</span>
<span id="593"> 593</span>
<span id="594"> 594</span>
<span id="595"> 595</span>
<span id="596"> 596</span>
<span id="597"> 597</span>
<span id="598"> 598</span>
<span id="599"> 599</span>
<span id="600"> 600</span>
<span id="601"> 601</span>
<span id="602"> 602</span>
<span id="603"> 603</span>
<span id="604"> 604</span>
<span id="605"> 605</span>
<span id="606"> 606</span>
<span id="607"> 607</span>
<span id="608"> 608</span>
<span id="609"> 609</span>
<span id="610"> 610</span>
<span id="611"> 611</span>
<span id="612"> 612</span>
<span id="613"> 613</span>
<span id="614"> 614</span>
<span id="615"> 615</span>
<span id="616"> 616</span>
<span id="617"> 617</span>
<span id="618"> 618</span>
<span id="619"> 619</span>
<span id="620"> 620</span>
<span id="621"> 621</span>
<span id="622"> 622</span>
<span id="623"> 623</span>
<span id="624"> 624</span>
<span id="625"> 625</span>
<span id="626"> 626</span>
<span id="627"> 627</span>
<span id="628"> 628</span>
<span id="629"> 629</span>
<span id="630"> 630</span>
<span id="631"> 631</span>
<span id="632"> 632</span>
<span id="633"> 633</span>
<span id="634"> 634</span>
<span id="635"> 635</span>
<span id="636"> 636</span>
<span id="637"> 637</span>
<span id="638"> 638</span>
<span id="639"> 639</span>
<span id="640"> 640</span>
<span id="641"> 641</span>
<span id="642"> 642</span>
<span id="643"> 643</span>
<span id="644"> 644</span>
<span id="645"> 645</span>
<span id="646"> 646</span>
<span id="647"> 647</span>
<span id="648"> 648</span>
<span id="649"> 649</span>
<span id="650"> 650</span>
<span id="651"> 651</span>
<span id="652"> 652</span>
<span id="653"> 653</span>
<span id="654"> 654</span>
<span id="655"> 655</span>
<span id="656"> 656</span>
<span id="657"> 657</span>
<span id="658"> 658</span>
<span id="659"> 659</span>
<span id="660"> 660</span>
<span id="661"> 661</span>
<span id="662"> 662</span>
<span id="663"> 663</span>
<span id="664"> 664</span>
<span id="665"> 665</span>
<span id="666"> 666</span>
<span id="667"> 667</span>
<span id="668"> 668</span>
<span id="669"> 669</span>
<span id="670"> 670</span>
<span id="671"> 671</span>
<span id="672"> 672</span>
<span id="673"> 673</span>
<span id="674"> 674</span>
<span id="675"> 675</span>
<span id="676"> 676</span>
<span id="677"> 677</span>
<span id="678"> 678</span>
<span id="679"> 679</span>
<span id="680"> 680</span>
<span id="681"> 681</span>
<span id="682"> 682</span>
<span id="683"> 683</span>
<span id="684"> 684</span>
<span id="685"> 685</span>
<span id="686"> 686</span>
<span id="687"> 687</span>
<span id="688"> 688</span>
<span id="689"> 689</span>
<span id="690"> 690</span>
<span id="691"> 691</span>
<span id="692"> 692</span>
<span id="693"> 693</span>
<span id="694"> 694</span>
<span id="695"> 695</span>
<span id="696"> 696</span>
<span id="697"> 697</span>
<span id="698"> 698</span>
<span id="699"> 699</span>
<span id="700"> 700</span>
<span id="701"> 701</span>
<span id="702"> 702</span>
<span id="703"> 703</span>
<span id="704"> 704</span>
<span id="705"> 705</span>
<span id="706"> 706</span>
<span id="707"> 707</span>
<span id="708"> 708</span>
<span id="709"> 709</span>
<span id="710"> 710</span>
<span id="711"> 711</span>
<span id="712"> 712</span>
<span id="713"> 713</span>
<span id="714"> 714</span>
<span id="715"> 715</span>
<span id="716"> 716</span>
<span id="717"> 717</span>
<span id="718"> 718</span>
<span id="719"> 719</span>
<span id="720"> 720</span>
<span id="721"> 721</span>
<span id="722"> 722</span>
<span id="723"> 723</span>
<span id="724"> 724</span>
<span id="725"> 725</span>
<span id="726"> 726</span>
<span id="727"> 727</span>
<span id="728"> 728</span>
<span id="729"> 729</span>
<span id="730"> 730</span>
<span id="731"> 731</span>
<span id="732"> 732</span>
<span id="733"> 733</span>
<span id="734"> 734</span>
<span id="735"> 735</span>
<span id="736"> 736</span>
<span id="737"> 737</span>
<span id="738"> 738</span>
<span id="739"> 739</span>
<span id="740"> 740</span>
<span id="741"> 741</span>
<span id="742"> 742</span>
<span id="743"> 743</span>
<span id="744"> 744</span>
<span id="745"> 745</span>
<span id="746"> 746</span>
<span id="747"> 747</span>
<span id="748"> 748</span>
<span id="749"> 749</span>
<span id="750"> 750</span>
<span id="751"> 751</span>
<span id="752"> 752</span>
<span id="753"> 753</span>
<span id="754"> 754</span>
<span id="755"> 755</span>
<span id="756"> 756</span>
<span id="757"> 757</span>
<span id="758"> 758</span>
<span id="759"> 759</span>
<span id="760"> 760</span>
<span id="761"> 761</span>
<span id="762"> 762</span>
<span id="763"> 763</span>
<span id="764"> 764</span>
<span id="765"> 765</span>
<span id="766"> 766</span>
<span id="767"> 767</span>
<span id="768"> 768</span>
<span id="769"> 769</span>
<span id="770"> 770</span>
<span id="771"> 771</span>
<span id="772"> 772</span>
<span id="773"> 773</span>
<span id="774"> 774</span>
<span id="775"> 775</span>
<span id="776"> 776</span>
<span id="777"> 777</span>
<span id="778"> 778</span>
<span id="779"> 779</span>
<span id="780"> 780</span>
<span id="781"> 781</span>
<span id="782"> 782</span>
<span id="783"> 783</span>
<span id="784"> 784</span>
<span id="785"> 785</span>
<span id="786"> 786</span>
<span id="787"> 787</span>
<span id="788"> 788</span>
<span id="789"> 789</span>
<span id="790"> 790</span>
<span id="791"> 791</span>
<span id="792"> 792</span>
<span id="793"> 793</span>
<span id="794"> 794</span>
<span id="795"> 795</span>
<span id="796"> 796</span>
<span id="797"> 797</span>
<span id="798"> 798</span>
<span id="799"> 799</span>
<span id="800"> 800</span>
<span id="801"> 801</span>
<span id="802"> 802</span>
<span id="803"> 803</span>
<span id="804"> 804</span>
<span id="805"> 805</span>
<span id="806"> 806</span>
<span id="807"> 807</span>
<span id="808"> 808</span>
<span id="809"> 809</span>
<span id="810"> 810</span>
<span id="811"> 811</span>
<span id="812"> 812</span>
<span id="813"> 813</span>
<span id="814"> 814</span>
<span id="815"> 815</span>
<span id="816"> 816</span>
<span id="817"> 817</span>
<span id="818"> 818</span>
<span id="819"> 819</span>
<span id="820"> 820</span>
<span id="821"> 821</span>
<span id="822"> 822</span>
<span id="823"> 823</span>
<span id="824"> 824</span>
<span id="825"> 825</span>
<span id="826"> 826</span>
<span id="827"> 827</span>
<span id="828"> 828</span>
<span id="829"> 829</span>
<span id="830"> 830</span>
<span id="831"> 831</span>
<span id="832"> 832</span>
<span id="833"> 833</span>
<span id="834"> 834</span>
<span id="835"> 835</span>
<span id="836"> 836</span>
<span id="837"> 837</span>
<span id="838"> 838</span>
<span id="839"> 839</span>
<span id="840"> 840</span>
<span id="841"> 841</span>
<span id="842"> 842</span>
<span id="843"> 843</span>
<span id="844"> 844</span>
<span id="845"> 845</span>
<span id="846"> 846</span>
<span id="847"> 847</span>
<span id="848"> 848</span>
<span id="849"> 849</span>
<span id="850"> 850</span>
<span id="851"> 851</span>
<span id="852"> 852</span>
<span id="853"> 853</span>
<span id="854"> 854</span>
<span id="855"> 855</span>
<span id="856"> 856</span>
<span id="857"> 857</span>
<span id="858"> 858</span>
<span id="859"> 859</span>
<span id="860"> 860</span>
<span id="861"> 861</span>
<span id="862"> 862</span>
<span id="863"> 863</span>
<span id="864"> 864</span>
<span id="865"> 865</span>
<span id="866"> 866</span>
<span id="867"> 867</span>
<span id="868"> 868</span>
<span id="869"> 869</span>
<span id="870"> 870</span>
<span id="871"> 871</span>
<span id="872"> 872</span>
<span id="873"> 873</span>
<span id="874"> 874</span>
<span id="875"> 875</span>
<span id="876"> 876</span>
<span id="877"> 877</span>
<span id="878"> 878</span>
<span id="879"> 879</span>
<span id="880"> 880</span>
<span id="881"> 881</span>
<span id="882"> 882</span>
<span id="883"> 883</span>
<span id="884"> 884</span>
<span id="885"> 885</span>
<span id="886"> 886</span>
<span id="887"> 887</span>
<span id="888"> 888</span>
<span id="889"> 889</span>
<span id="890"> 890</span>
<span id="891"> 891</span>
<span id="892"> 892</span>
<span id="893"> 893</span>
<span id="894"> 894</span>
<span id="895"> 895</span>
<span id="896"> 896</span>
<span id="897"> 897</span>
<span id="898"> 898</span>
<span id="899"> 899</span>
<span id="900"> 900</span>
<span id="901"> 901</span>
<span id="902"> 902</span>
<span id="903"> 903</span>
<span id="904"> 904</span>
<span id="905"> 905</span>
<span id="906"> 906</span>
<span id="907"> 907</span>
<span id="908"> 908</span>
<span id="909"> 909</span>
<span id="910"> 910</span>
<span id="911"> 911</span>
<span id="912"> 912</span>
<span id="913"> 913</span>
<span id="914"> 914</span>
<span id="915"> 915</span>
<span id="916"> 916</span>
<span id="917"> 917</span>
<span id="918"> 918</span>
<span id="919"> 919</span>
<span id="920"> 920</span>
<span id="921"> 921</span>
<span id="922"> 922</span>
<span id="923"> 923</span>
<span id="924"> 924</span>
<span id="925"> 925</span>
<span id="926"> 926</span>
<span id="927"> 927</span>
<span id="928"> 928</span>
<span id="929"> 929</span>
<span id="930"> 930</span>
<span id="931"> 931</span>
<span id="932"> 932</span>
<span id="933"> 933</span>
<span id="934"> 934</span>
<span id="935"> 935</span>
<span id="936"> 936</span>
<span id="937"> 937</span>
<span id="938"> 938</span>
<span id="939"> 939</span>
<span id="940"> 940</span>
<span id="941"> 941</span>
<span id="942"> 942</span>
<span id="943"> 943</span>
<span id="944"> 944</span>
<span id="945"> 945</span>
<span id="946"> 946</span>
<span id="947"> 947</span>
<span id="948"> 948</span>
<span id="949"> 949</span>
<span id="950"> 950</span>
<span id="951"> 951</span>
<span id="952"> 952</span>
<span id="953"> 953</span>
<span id="954"> 954</span>
<span id="955"> 955</span>
<span id="956"> 956</span>
<span id="957"> 957</span>
<span id="958"> 958</span>
<span id="959"> 959</span>
<span id="960"> 960</span>
<span id="961"> 961</span>
<span id="962"> 962</span>
<span id="963"> 963</span>
<span id="964"> 964</span>
<span id="965"> 965</span>
<span id="966"> 966</span>
<span id="967"> 967</span>
<span id="968"> 968</span>
<span id="969"> 969</span>
<span id="970"> 970</span>
<span id="971"> 971</span>
<span id="972"> 972</span>
<span id="973"> 973</span>
<span id="974"> 974</span>
<span id="975"> 975</span>
<span id="976"> 976</span>
<span id="977"> 977</span>
<span id="978"> 978</span>
<span id="979"> 979</span>
<span id="980"> 980</span>
<span id="981"> 981</span>
<span id="982"> 982</span>
<span id="983"> 983</span>
<span id="984"> 984</span>
<span id="985"> 985</span>
<span id="986"> 986</span>
<span id="987"> 987</span>
<span id="988"> 988</span>
<span id="989"> 989</span>
<span id="990"> 990</span>
<span id="991"> 991</span>
<span id="992"> 992</span>
<span id="993"> 993</span>
<span id="994"> 994</span>
<span id="995"> 995</span>
<span id="996"> 996</span>
<span id="997"> 997</span>
<span id="998"> 998</span>
<span id="999"> 999</span>
<span id="1000">1000</span>
<span id="1001">1001</span>
<span id="1002">1002</span>
<span id="1003">1003</span>
<span id="1004">1004</span>
<span id="1005">1005</span>
<span id="1006">1006</span>
<span id="1007">1007</span>
<span id="1008">1008</span>
<span id="1009">1009</span>
<span id="1010">1010</span>
<span id="1011">1011</span>
<span id="1012">1012</span>
<span id="1013">1013</span>
<span id="1014">1014</span>
<span id="1015">1015</span>
<span id="1016">1016</span>
<span id="1017">1017</span>
<span id="1018">1018</span>
<span id="1019">1019</span>
<span id="1020">1020</span>
<span id="1021">1021</span>
<span id="1022">1022</span>
<span id="1023">1023</span>
<span id="1024">1024</span>
<span id="1025">1025</span>
<span id="1026">1026</span>
<span id="1027">1027</span>
<span id="1028">1028</span>
<span id="1029">1029</span>
<span id="1030">1030</span>
<span id="1031">1031</span>
<span id="1032">1032</span>
<span id="1033">1033</span>
<span id="1034">1034</span>
<span id="1035">1035</span>
<span id="1036">1036</span>
<span id="1037">1037</span>
<span id="1038">1038</span>
<span id="1039">1039</span>
<span id="1040">1040</span>
<span id="1041">1041</span>
<span id="1042">1042</span>
<span id="1043">1043</span>
<span id="1044">1044</span>
<span id="1045">1045</span>
<span id="1046">1046</span>
<span id="1047">1047</span>
<span id="1048">1048</span>
<span id="1049">1049</span>
<span id="1050">1050</span>
<span id="1051">1051</span>
<span id="1052">1052</span>
<span id="1053">1053</span>
<span id="1054">1054</span>
<span id="1055">1055</span>
<span id="1056">1056</span>
<span id="1057">1057</span>
<span id="1058">1058</span>
<span id="1059">1059</span>
<span id="1060">1060</span>
<span id="1061">1061</span>
<span id="1062">1062</span>
<span id="1063">1063</span>
<span id="1064">1064</span>
<span id="1065">1065</span>
<span id="1066">1066</span>
<span id="1067">1067</span>
<span id="1068">1068</span>
<span id="1069">1069</span>
<span id="1070">1070</span>
<span id="1071">1071</span>
<span id="1072">1072</span>
<span id="1073">1073</span>
<span id="1074">1074</span>
<span id="1075">1075</span>
<span id="1076">1076</span>
<span id="1077">1077</span>
<span id="1078">1078</span>
<span id="1079">1079</span>
<span id="1080">1080</span>
<span id="1081">1081</span>
<span id="1082">1082</span>
<span id="1083">1083</span>
<span id="1084">1084</span>
<span id="1085">1085</span>
<span id="1086">1086</span>
<span id="1087">1087</span>
<span id="1088">1088</span>
<span id="1089">1089</span>
<span id="1090">1090</span>
<span id="1091">1091</span>
<span id="1092">1092</span>
<span id="1093">1093</span>
<span id="1094">1094</span>
<span id="1095">1095</span>
<span id="1096">1096</span>
<span id="1097">1097</span>
<span id="1098">1098</span>
<span id="1099">1099</span>
<span id="1100">1100</span>
<span id="1101">1101</span>
<span id="1102">1102</span>
<span id="1103">1103</span>
<span id="1104">1104</span>
<span id="1105">1105</span>
<span id="1106">1106</span>
<span id="1107">1107</span>
<span id="1108">1108</span>
<span id="1109">1109</span>
<span id="1110">1110</span>
<span id="1111">1111</span>
<span id="1112">1112</span>
<span id="1113">1113</span>
<span id="1114">1114</span>
<span id="1115">1115</span>
<span id="1116">1116</span>
<span id="1117">1117</span>
<span id="1118">1118</span>
<span id="1119">1119</span>
<span id="1120">1120</span>
<span id="1121">1121</span>
</pre><pre class="rust ">
<span class="doccomment">//! Error and Result module</span>
<span class="kw">use</span> <span class="ident">std</span>::<span class="ident">io</span>::<span class="ident">Error</span> <span class="kw">as</span> <span class="ident">IoError</span>;
<span class="kw">use</span> <span class="ident">std</span>::<span class="ident">str</span>::<span class="ident">Utf8Error</span>;
<span class="kw">use</span> <span class="ident">std</span>::<span class="ident">string</span>::<span class="ident">FromUtf8Error</span>;
<span class="kw">use</span> <span class="ident">std</span>::<span class="ident">sync</span>::<span class="ident">Mutex</span>;
<span class="kw">use</span> <span class="ident">std</span>::{<span class="ident">fmt</span>, <span class="ident">io</span>, <span class="ident">result</span>};
<span class="kw">use</span> <span class="ident">actix</span>::<span class="ident">MailboxError</span>;
<span class="kw">use</span> <span class="ident">cookie</span>;
<span class="kw">use</span> <span class="ident">failure</span>::{<span class="self">self</span>, <span class="ident">Backtrace</span>, <span class="ident">Fail</span>};
<span class="kw">use</span> <span class="ident">futures</span>::<span class="ident">Canceled</span>;
<span class="kw">use</span> <span class="ident">http</span>::<span class="ident">uri</span>::<span class="ident">InvalidUri</span>;
<span class="kw">use</span> <span class="ident">http</span>::{<span class="ident">header</span>, <span class="ident">Error</span> <span class="kw">as</span> <span class="ident">HttpError</span>, <span class="ident">StatusCode</span>};
<span class="kw">use</span> <span class="ident">http2</span>::<span class="ident">Error</span> <span class="kw">as</span> <span class="ident">Http2Error</span>;
<span class="kw">use</span> <span class="ident">httparse</span>;
<span class="kw">use</span> <span class="ident">serde</span>::<span class="ident">de</span>::<span class="ident">value</span>::<span class="ident">Error</span> <span class="kw">as</span> <span class="ident">DeError</span>;
<span class="kw">use</span> <span class="ident">serde_json</span>::<span class="ident">error</span>::<span class="ident">Error</span> <span class="kw">as</span> <span class="ident">JsonError</span>;
<span class="kw">use</span> <span class="ident">serde_urlencoded</span>::<span class="ident">ser</span>::<span class="ident">Error</span> <span class="kw">as</span> <span class="ident">FormError</span>;
<span class="kw">use</span> <span class="ident">tokio_timer</span>::<span class="ident">Error</span> <span class="kw">as</span> <span class="ident">TimerError</span>;
<span class="kw">pub</span> <span class="kw">use</span> <span class="ident">url</span>::<span class="ident">ParseError</span> <span class="kw">as</span> <span class="ident">UrlParseError</span>;
<span class="comment">// re-exports</span>
<span class="kw">pub</span> <span class="kw">use</span> <span class="ident">cookie</span>::<span class="ident">ParseError</span> <span class="kw">as</span> <span class="ident">CookieParseError</span>;
<span class="kw">use</span> <span class="ident">handler</span>::<span class="ident">Responder</span>;
<span class="kw">use</span> <span class="ident">httprequest</span>::<span class="ident">HttpRequest</span>;
<span class="kw">use</span> <span class="ident">httpresponse</span>::{<span class="ident">HttpResponse</span>, <span class="ident">HttpResponseParts</span>};
<span class="doccomment">/// A specialized [`Result`](https://doc.rust-lang.org/std/result/enum.Result.html)</span>
<span class="doccomment">/// for actix web operations</span>
<span class="doccomment">///</span>
<span class="doccomment">/// This typedef is generally used to avoid writing out</span>
<span class="doccomment">/// `actix_web::error::Error` directly and is otherwise a direct mapping to</span>
<span class="doccomment">/// `Result`.</span>
<span class="kw">pub</span> <span class="kw">type</span> <span class="prelude-ty">Result</span><span class="op">&lt;</span><span class="ident">T</span>, <span class="ident">E</span> <span class="op">=</span> <span class="ident">Error</span><span class="op">&gt;</span> <span class="op">=</span> <span class="ident">result</span>::<span class="prelude-ty">Result</span><span class="op">&lt;</span><span class="ident">T</span>, <span class="ident">E</span><span class="op">&gt;</span>;
<span class="doccomment">/// General purpose actix web error.</span>
<span class="doccomment">///</span>
<span class="doccomment">/// An actix web error is used to carry errors from `failure` or `std::error`</span>
<span class="doccomment">/// through actix in a convenient way. It can be created through</span>
<span class="doccomment">/// converting errors with `into()`.</span>
<span class="doccomment">///</span>
<span class="doccomment">/// Whenever it is created from an external object a response error is created</span>
<span class="doccomment">/// for it that can be used to create an http response from it this means that</span>
<span class="doccomment">/// if you have access to an actix `Error` you can always get a</span>
<span class="doccomment">/// `ResponseError` reference from it.</span>
<span class="kw">pub</span> <span class="kw">struct</span> <span class="ident">Error</span> {
<span class="ident">cause</span>: <span class="ident">Box</span><span class="op">&lt;</span><span class="ident">ResponseError</span><span class="op">&gt;</span>,
<span class="ident">backtrace</span>: <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">Backtrace</span><span class="op">&gt;</span>,
}
<span class="kw">impl</span> <span class="ident">Error</span> {
<span class="doccomment">/// Deprecated way to reference the underlying response error.</span>
<span class="attribute">#[<span class="ident">deprecated</span>(
<span class="ident">since</span> <span class="op">=</span> <span class="string">&quot;0.6.0&quot;</span>, <span class="ident">note</span> <span class="op">=</span> <span class="string">&quot;please use `Error::as_response_error()` instead&quot;</span>
)]</span>
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">cause</span>(<span class="kw-2">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</span> <span class="kw-2">&amp;</span><span class="ident">ResponseError</span> {
<span class="self">self</span>.<span class="ident">cause</span>.<span class="ident">as_ref</span>()
}
<span class="doccomment">/// Returns a reference to the underlying cause of this `Error` as `Fail`</span>
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">as_fail</span>(<span class="kw-2">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</span> <span class="kw-2">&amp;</span><span class="ident">Fail</span> {
<span class="self">self</span>.<span class="ident">cause</span>.<span class="ident">as_fail</span>()
}
<span class="doccomment">/// Returns the reference to the underlying `ResponseError`.</span>
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">as_response_error</span>(<span class="kw-2">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</span> <span class="kw-2">&amp;</span><span class="ident">ResponseError</span> {
<span class="self">self</span>.<span class="ident">cause</span>.<span class="ident">as_ref</span>()
}
<span class="doccomment">/// Returns a reference to the Backtrace carried by this error, if it</span>
<span class="doccomment">/// carries one.</span>
<span class="doccomment">///</span>
<span class="doccomment">/// This uses the same `Backtrace` type that `failure` uses.</span>
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">backtrace</span>(<span class="kw-2">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</span> <span class="kw-2">&amp;</span><span class="ident">Backtrace</span> {
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">bt</span>) <span class="op">=</span> <span class="self">self</span>.<span class="ident">cause</span>.<span class="ident">backtrace</span>() {
<span class="ident">bt</span>
} <span class="kw">else</span> {
<span class="self">self</span>.<span class="ident">backtrace</span>.<span class="ident">as_ref</span>().<span class="ident">unwrap</span>()
}
}
<span class="doccomment">/// Attempts to downcast this `Error` to a particular `Fail` type by</span>
<span class="doccomment">/// reference.</span>
<span class="doccomment">///</span>
<span class="doccomment">/// If the underlying error is not of type `T`, this will return `None`.</span>
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">downcast_ref</span><span class="op">&lt;</span><span class="ident">T</span>: <span class="ident">Fail</span><span class="op">&gt;</span>(<span class="kw-2">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</span> <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="kw-2">&amp;</span><span class="ident">T</span><span class="op">&gt;</span> {
<span class="comment">// in the most trivial way the cause is directly of the requested type.</span>
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">rv</span>) <span class="op">=</span> <span class="ident">Fail</span>::<span class="ident">downcast_ref</span>(<span class="self">self</span>.<span class="ident">cause</span>.<span class="ident">as_fail</span>()) {
<span class="kw">return</span> <span class="prelude-val">Some</span>(<span class="ident">rv</span>);
}
<span class="comment">// in the more complex case the error has been constructed from a failure</span>
<span class="comment">// error. This happens because we implement From&lt;failure::Error&gt; by</span>
<span class="comment">// calling compat() and then storing it here. In failure this is</span>
<span class="comment">// represented by a failure::Error being wrapped in a failure::Compat.</span>
<span class="comment">//</span>
<span class="comment">// So we first downcast into that compat, to then further downcast through</span>
<span class="comment">// the failure&#39;s Error downcasting system into the original failure.</span>
<span class="comment">//</span>
<span class="comment">// This currently requires a transmute. This could be avoided if failure</span>
<span class="comment">// provides a deref: https://github.com/rust-lang-nursery/failure/pull/213</span>
<span class="kw">let</span> <span class="ident">compat</span>: <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="kw-2">&amp;</span><span class="ident">failure</span>::<span class="ident">Compat</span><span class="op">&lt;</span><span class="ident">failure</span>::<span class="ident">Error</span><span class="op">&gt;&gt;</span> <span class="op">=</span>
<span class="ident">Fail</span>::<span class="ident">downcast_ref</span>(<span class="self">self</span>.<span class="ident">cause</span>.<span class="ident">as_fail</span>());
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">compat</span>) <span class="op">=</span> <span class="ident">compat</span> {
<span class="kw">pub</span> <span class="kw">struct</span> <span class="ident">CompatWrappedError</span> {
<span class="ident">error</span>: <span class="ident">failure</span>::<span class="ident">Error</span>,
}
<span class="kw">let</span> <span class="ident">compat</span>: <span class="kw-2">&amp;</span><span class="ident">CompatWrappedError</span> <span class="op">=</span>
<span class="kw">unsafe</span> { <span class="kw-2">&amp;</span><span class="kw-2">*</span>(<span class="ident">compat</span> <span class="kw">as</span> <span class="kw-2">*</span><span class="kw">const</span> <span class="kw">_</span> <span class="kw">as</span> <span class="kw-2">*</span><span class="kw">const</span> <span class="ident">CompatWrappedError</span>) };
<span class="ident">compat</span>.<span class="ident">error</span>.<span class="ident">downcast_ref</span>()
} <span class="kw">else</span> {
<span class="prelude-val">None</span>
}
}
}
<span class="doccomment">/// Helper trait to downcast a response error into a fail.</span>
<span class="doccomment">///</span>
<span class="doccomment">/// This is currently not exposed because it&#39;s unclear if this is the best way</span>
<span class="doccomment">/// to achieve the downcasting on `Error` for which this is needed.</span>
<span class="attribute">#[<span class="ident">doc</span>(<span class="ident">hidden</span>)]</span>
<span class="kw">pub</span> <span class="kw">trait</span> <span class="ident">InternalResponseErrorAsFail</span> {
<span class="attribute">#[<span class="ident">doc</span>(<span class="ident">hidden</span>)]</span>
<span class="kw">fn</span> <span class="ident">as_fail</span>(<span class="kw-2">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</span> <span class="kw-2">&amp;</span><span class="ident">Fail</span>;
<span class="attribute">#[<span class="ident">doc</span>(<span class="ident">hidden</span>)]</span>
<span class="kw">fn</span> <span class="ident">as_mut_fail</span>(<span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>) <span class="op">-&gt;</span> <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">Fail</span>;
}
<span class="attribute">#[<span class="ident">doc</span>(<span class="ident">hidden</span>)]</span>
<span class="kw">impl</span><span class="op">&lt;</span><span class="ident">T</span>: <span class="ident">ResponseError</span><span class="op">&gt;</span> <span class="ident">InternalResponseErrorAsFail</span> <span class="kw">for</span> <span class="ident">T</span> {
<span class="kw">fn</span> <span class="ident">as_fail</span>(<span class="kw-2">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</span> <span class="kw-2">&amp;</span><span class="ident">Fail</span> {
<span class="self">self</span>
}
<span class="kw">fn</span> <span class="ident">as_mut_fail</span>(<span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>) <span class="op">-&gt;</span> <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">Fail</span> {
<span class="self">self</span>
}
}
<span class="doccomment">/// Error that can be converted to `HttpResponse`</span>
<span class="kw">pub</span> <span class="kw">trait</span> <span class="ident">ResponseError</span>: <span class="ident">Fail</span> <span class="op">+</span> <span class="ident">InternalResponseErrorAsFail</span> {
<span class="doccomment">/// Create response for error</span>
<span class="doccomment">///</span>
<span class="doccomment">/// Internal server error is generated by default.</span>
<span class="kw">fn</span> <span class="ident">error_response</span>(<span class="kw-2">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</span> <span class="ident">HttpResponse</span> {
<span class="ident">HttpResponse</span>::<span class="ident">new</span>(<span class="ident">StatusCode</span>::<span class="ident">INTERNAL_SERVER_ERROR</span>)
}
}
<span class="kw">impl</span> <span class="ident">fmt</span>::<span class="ident">Display</span> <span class="kw">for</span> <span class="ident">Error</span> {
<span class="kw">fn</span> <span class="ident">fmt</span>(<span class="kw-2">&amp;</span><span class="self">self</span>, <span class="ident">f</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">fmt</span>::<span class="ident">Formatter</span>) <span class="op">-&gt;</span> <span class="ident">fmt</span>::<span class="prelude-ty">Result</span> {
<span class="ident">fmt</span>::<span class="ident">Display</span>::<span class="ident">fmt</span>(<span class="kw-2">&amp;</span><span class="self">self</span>.<span class="ident">cause</span>, <span class="ident">f</span>)
}
}
<span class="kw">impl</span> <span class="ident">fmt</span>::<span class="ident">Debug</span> <span class="kw">for</span> <span class="ident">Error</span> {
<span class="kw">fn</span> <span class="ident">fmt</span>(<span class="kw-2">&amp;</span><span class="self">self</span>, <span class="ident">f</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">fmt</span>::<span class="ident">Formatter</span>) <span class="op">-&gt;</span> <span class="ident">fmt</span>::<span class="prelude-ty">Result</span> {
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">bt</span>) <span class="op">=</span> <span class="self">self</span>.<span class="ident">cause</span>.<span class="ident">backtrace</span>() {
<span class="macro">write</span><span class="macro">!</span>(<span class="ident">f</span>, <span class="string">&quot;{:?}\n\n{:?}&quot;</span>, <span class="kw-2">&amp;</span><span class="self">self</span>.<span class="ident">cause</span>, <span class="ident">bt</span>)
} <span class="kw">else</span> {
<span class="macro">write</span><span class="macro">!</span>(
<span class="ident">f</span>,
<span class="string">&quot;{:?}\n\n{:?}&quot;</span>,
<span class="kw-2">&amp;</span><span class="self">self</span>.<span class="ident">cause</span>,
<span class="self">self</span>.<span class="ident">backtrace</span>.<span class="ident">as_ref</span>().<span class="ident">unwrap</span>()
)
}
}
}
<span class="doccomment">/// Convert `Error` to a `HttpResponse` instance</span>
<span class="kw">impl</span> <span class="ident">From</span><span class="op">&lt;</span><span class="ident">Error</span><span class="op">&gt;</span> <span class="kw">for</span> <span class="ident">HttpResponse</span> {
<span class="kw">fn</span> <span class="ident">from</span>(<span class="ident">err</span>: <span class="ident">Error</span>) <span class="op">-&gt;</span> <span class="self">Self</span> {
<span class="ident">HttpResponse</span>::<span class="ident">from_error</span>(<span class="ident">err</span>)
}
}
<span class="doccomment">/// `Error` for any error that implements `ResponseError`</span>
<span class="kw">impl</span><span class="op">&lt;</span><span class="ident">T</span>: <span class="ident">ResponseError</span><span class="op">&gt;</span> <span class="ident">From</span><span class="op">&lt;</span><span class="ident">T</span><span class="op">&gt;</span> <span class="kw">for</span> <span class="ident">Error</span> {
<span class="kw">fn</span> <span class="ident">from</span>(<span class="ident">err</span>: <span class="ident">T</span>) <span class="op">-&gt;</span> <span class="ident">Error</span> {
<span class="kw">let</span> <span class="ident">backtrace</span> <span class="op">=</span> <span class="kw">if</span> <span class="ident">err</span>.<span class="ident">backtrace</span>().<span class="ident">is_none</span>() {
<span class="prelude-val">Some</span>(<span class="ident">Backtrace</span>::<span class="ident">new</span>())
} <span class="kw">else</span> {
<span class="prelude-val">None</span>
};
<span class="ident">Error</span> {
<span class="ident">cause</span>: <span class="ident">Box</span>::<span class="ident">new</span>(<span class="ident">err</span>),
<span class="ident">backtrace</span>,
}
}
}
<span class="doccomment">/// Compatibility for `failure::Error`</span>
<span class="kw">impl</span><span class="op">&lt;</span><span class="ident">T</span><span class="op">&gt;</span> <span class="ident">ResponseError</span> <span class="kw">for</span> <span class="ident">failure</span>::<span class="ident">Compat</span><span class="op">&lt;</span><span class="ident">T</span><span class="op">&gt;</span> <span class="kw">where</span>
<span class="ident">T</span>: <span class="ident">fmt</span>::<span class="ident">Display</span> <span class="op">+</span> <span class="ident">fmt</span>::<span class="ident">Debug</span> <span class="op">+</span> <span class="ident">Sync</span> <span class="op">+</span> <span class="ident">Send</span> <span class="op">+</span> <span class="lifetime">&#39;static</span>
{}
<span class="kw">impl</span> <span class="ident">From</span><span class="op">&lt;</span><span class="ident">failure</span>::<span class="ident">Error</span><span class="op">&gt;</span> <span class="kw">for</span> <span class="ident">Error</span> {
<span class="kw">fn</span> <span class="ident">from</span>(<span class="ident">err</span>: <span class="ident">failure</span>::<span class="ident">Error</span>) <span class="op">-&gt;</span> <span class="ident">Error</span> {
<span class="ident">err</span>.<span class="ident">compat</span>().<span class="ident">into</span>()
}
}
<span class="doccomment">/// `InternalServerError` for `JsonError`</span>
<span class="kw">impl</span> <span class="ident">ResponseError</span> <span class="kw">for</span> <span class="ident">JsonError</span> {}
<span class="doccomment">/// `InternalServerError` for `FormError`</span>
<span class="kw">impl</span> <span class="ident">ResponseError</span> <span class="kw">for</span> <span class="ident">FormError</span> {}
<span class="doccomment">/// `InternalServerError` for `TimerError`</span>
<span class="kw">impl</span> <span class="ident">ResponseError</span> <span class="kw">for</span> <span class="ident">TimerError</span> {}
<span class="doccomment">/// `InternalServerError` for `UrlParseError`</span>
<span class="kw">impl</span> <span class="ident">ResponseError</span> <span class="kw">for</span> <span class="ident">UrlParseError</span> {}
<span class="doccomment">/// Return `BAD_REQUEST` for `de::value::Error`</span>
<span class="kw">impl</span> <span class="ident">ResponseError</span> <span class="kw">for</span> <span class="ident">DeError</span> {
<span class="kw">fn</span> <span class="ident">error_response</span>(<span class="kw-2">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</span> <span class="ident">HttpResponse</span> {
<span class="ident">HttpResponse</span>::<span class="ident">new</span>(<span class="ident">StatusCode</span>::<span class="ident">BAD_REQUEST</span>)
}
}
<span class="doccomment">/// Return `BAD_REQUEST` for `Utf8Error`</span>
<span class="kw">impl</span> <span class="ident">ResponseError</span> <span class="kw">for</span> <span class="ident">Utf8Error</span> {
<span class="kw">fn</span> <span class="ident">error_response</span>(<span class="kw-2">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</span> <span class="ident">HttpResponse</span> {
<span class="ident">HttpResponse</span>::<span class="ident">new</span>(<span class="ident">StatusCode</span>::<span class="ident">BAD_REQUEST</span>)
}
}
<span class="doccomment">/// Return `InternalServerError` for `HttpError`,</span>
<span class="doccomment">/// Response generation can return `HttpError`, so it is internal error</span>
<span class="kw">impl</span> <span class="ident">ResponseError</span> <span class="kw">for</span> <span class="ident">HttpError</span> {}
<span class="doccomment">/// Return `InternalServerError` for `io::Error`</span>
<span class="kw">impl</span> <span class="ident">ResponseError</span> <span class="kw">for</span> <span class="ident">io</span>::<span class="ident">Error</span> {
<span class="kw">fn</span> <span class="ident">error_response</span>(<span class="kw-2">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</span> <span class="ident">HttpResponse</span> {
<span class="kw">match</span> <span class="self">self</span>.<span class="ident">kind</span>() {
<span class="ident">io</span>::<span class="ident">ErrorKind</span>::<span class="ident">NotFound</span> <span class="op">=&gt;</span> <span class="ident">HttpResponse</span>::<span class="ident">new</span>(<span class="ident">StatusCode</span>::<span class="ident">NOT_FOUND</span>),
<span class="ident">io</span>::<span class="ident">ErrorKind</span>::<span class="ident">PermissionDenied</span> <span class="op">=&gt;</span> <span class="ident">HttpResponse</span>::<span class="ident">new</span>(<span class="ident">StatusCode</span>::<span class="ident">FORBIDDEN</span>),
<span class="kw">_</span> <span class="op">=&gt;</span> <span class="ident">HttpResponse</span>::<span class="ident">new</span>(<span class="ident">StatusCode</span>::<span class="ident">INTERNAL_SERVER_ERROR</span>),
}
}
}
<span class="doccomment">/// `BadRequest` for `InvalidHeaderValue`</span>
<span class="kw">impl</span> <span class="ident">ResponseError</span> <span class="kw">for</span> <span class="ident">header</span>::<span class="ident">InvalidHeaderValue</span> {
<span class="kw">fn</span> <span class="ident">error_response</span>(<span class="kw-2">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</span> <span class="ident">HttpResponse</span> {
<span class="ident">HttpResponse</span>::<span class="ident">new</span>(<span class="ident">StatusCode</span>::<span class="ident">BAD_REQUEST</span>)
}
}
<span class="doccomment">/// `BadRequest` for `InvalidHeaderValue`</span>
<span class="kw">impl</span> <span class="ident">ResponseError</span> <span class="kw">for</span> <span class="ident">header</span>::<span class="ident">InvalidHeaderValueBytes</span> {
<span class="kw">fn</span> <span class="ident">error_response</span>(<span class="kw-2">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</span> <span class="ident">HttpResponse</span> {
<span class="ident">HttpResponse</span>::<span class="ident">new</span>(<span class="ident">StatusCode</span>::<span class="ident">BAD_REQUEST</span>)
}
}
<span class="doccomment">/// `InternalServerError` for `futures::Canceled`</span>
<span class="kw">impl</span> <span class="ident">ResponseError</span> <span class="kw">for</span> <span class="ident">Canceled</span> {}
<span class="doccomment">/// `InternalServerError` for `actix::MailboxError`</span>
<span class="kw">impl</span> <span class="ident">ResponseError</span> <span class="kw">for</span> <span class="ident">MailboxError</span> {}
<span class="doccomment">/// A set of errors that can occur during parsing HTTP streams</span>
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Fail</span>, <span class="ident">Debug</span>)]</span>
<span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">ParseError</span> {
<span class="doccomment">/// An invalid `Method`, such as `GE.T`.</span>
<span class="attribute">#[<span class="ident">fail</span>(<span class="ident">display</span> <span class="op">=</span> <span class="string">&quot;Invalid Method specified&quot;</span>)]</span>
<span class="ident">Method</span>,
<span class="doccomment">/// An invalid `Uri`, such as `exam ple.domain`.</span>
<span class="attribute">#[<span class="ident">fail</span>(<span class="ident">display</span> <span class="op">=</span> <span class="string">&quot;Uri error: {}&quot;</span>, <span class="ident">_0</span>)]</span>
<span class="ident">Uri</span>(<span class="ident">InvalidUri</span>),
<span class="doccomment">/// An invalid `HttpVersion`, such as `HTP/1.1`</span>
<span class="attribute">#[<span class="ident">fail</span>(<span class="ident">display</span> <span class="op">=</span> <span class="string">&quot;Invalid HTTP version specified&quot;</span>)]</span>
<span class="ident">Version</span>,
<span class="doccomment">/// An invalid `Header`.</span>
<span class="attribute">#[<span class="ident">fail</span>(<span class="ident">display</span> <span class="op">=</span> <span class="string">&quot;Invalid Header provided&quot;</span>)]</span>
<span class="ident">Header</span>,
<span class="doccomment">/// A message head is too large to be reasonable.</span>
<span class="attribute">#[<span class="ident">fail</span>(<span class="ident">display</span> <span class="op">=</span> <span class="string">&quot;Message head is too large&quot;</span>)]</span>
<span class="ident">TooLarge</span>,
<span class="doccomment">/// A message reached EOF, but is not complete.</span>
<span class="attribute">#[<span class="ident">fail</span>(<span class="ident">display</span> <span class="op">=</span> <span class="string">&quot;Message is incomplete&quot;</span>)]</span>
<span class="ident">Incomplete</span>,
<span class="doccomment">/// An invalid `Status`, such as `1337 ELITE`.</span>
<span class="attribute">#[<span class="ident">fail</span>(<span class="ident">display</span> <span class="op">=</span> <span class="string">&quot;Invalid Status provided&quot;</span>)]</span>
<span class="ident">Status</span>,
<span class="doccomment">/// A timeout occurred waiting for an IO event.</span>
<span class="attribute">#[<span class="ident">allow</span>(<span class="ident">dead_code</span>)]</span>
<span class="attribute">#[<span class="ident">fail</span>(<span class="ident">display</span> <span class="op">=</span> <span class="string">&quot;Timeout&quot;</span>)]</span>
<span class="ident">Timeout</span>,
<span class="doccomment">/// An `io::Error` that occurred while trying to read or write to a network</span>
<span class="doccomment">/// stream.</span>
<span class="attribute">#[<span class="ident">fail</span>(<span class="ident">display</span> <span class="op">=</span> <span class="string">&quot;IO error: {}&quot;</span>, <span class="ident">_0</span>)]</span>
<span class="ident">Io</span>(<span class="attribute">#[<span class="ident">cause</span>]</span> <span class="ident">IoError</span>),
<span class="doccomment">/// Parsing a field as string failed</span>
<span class="attribute">#[<span class="ident">fail</span>(<span class="ident">display</span> <span class="op">=</span> <span class="string">&quot;UTF8 error: {}&quot;</span>, <span class="ident">_0</span>)]</span>
<span class="ident">Utf8</span>(<span class="attribute">#[<span class="ident">cause</span>]</span> <span class="ident">Utf8Error</span>),
}
<span class="doccomment">/// Return `BadRequest` for `ParseError`</span>
<span class="kw">impl</span> <span class="ident">ResponseError</span> <span class="kw">for</span> <span class="ident">ParseError</span> {
<span class="kw">fn</span> <span class="ident">error_response</span>(<span class="kw-2">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</span> <span class="ident">HttpResponse</span> {
<span class="ident">HttpResponse</span>::<span class="ident">new</span>(<span class="ident">StatusCode</span>::<span class="ident">BAD_REQUEST</span>)
}
}
<span class="kw">impl</span> <span class="ident">From</span><span class="op">&lt;</span><span class="ident">IoError</span><span class="op">&gt;</span> <span class="kw">for</span> <span class="ident">ParseError</span> {
<span class="kw">fn</span> <span class="ident">from</span>(<span class="ident">err</span>: <span class="ident">IoError</span>) <span class="op">-&gt;</span> <span class="ident">ParseError</span> {
<span class="ident">ParseError</span>::<span class="ident">Io</span>(<span class="ident">err</span>)
}
}
<span class="kw">impl</span> <span class="ident">From</span><span class="op">&lt;</span><span class="ident">InvalidUri</span><span class="op">&gt;</span> <span class="kw">for</span> <span class="ident">ParseError</span> {
<span class="kw">fn</span> <span class="ident">from</span>(<span class="ident">err</span>: <span class="ident">InvalidUri</span>) <span class="op">-&gt;</span> <span class="ident">ParseError</span> {
<span class="ident">ParseError</span>::<span class="ident">Uri</span>(<span class="ident">err</span>)
}
}
<span class="kw">impl</span> <span class="ident">From</span><span class="op">&lt;</span><span class="ident">Utf8Error</span><span class="op">&gt;</span> <span class="kw">for</span> <span class="ident">ParseError</span> {
<span class="kw">fn</span> <span class="ident">from</span>(<span class="ident">err</span>: <span class="ident">Utf8Error</span>) <span class="op">-&gt;</span> <span class="ident">ParseError</span> {
<span class="ident">ParseError</span>::<span class="ident">Utf8</span>(<span class="ident">err</span>)
}
}
<span class="kw">impl</span> <span class="ident">From</span><span class="op">&lt;</span><span class="ident">FromUtf8Error</span><span class="op">&gt;</span> <span class="kw">for</span> <span class="ident">ParseError</span> {
<span class="kw">fn</span> <span class="ident">from</span>(<span class="ident">err</span>: <span class="ident">FromUtf8Error</span>) <span class="op">-&gt;</span> <span class="ident">ParseError</span> {
<span class="ident">ParseError</span>::<span class="ident">Utf8</span>(<span class="ident">err</span>.<span class="ident">utf8_error</span>())
}
}
<span class="kw">impl</span> <span class="ident">From</span><span class="op">&lt;</span><span class="ident">httparse</span>::<span class="ident">Error</span><span class="op">&gt;</span> <span class="kw">for</span> <span class="ident">ParseError</span> {
<span class="kw">fn</span> <span class="ident">from</span>(<span class="ident">err</span>: <span class="ident">httparse</span>::<span class="ident">Error</span>) <span class="op">-&gt;</span> <span class="ident">ParseError</span> {
<span class="kw">match</span> <span class="ident">err</span> {
<span class="ident">httparse</span>::<span class="ident">Error</span>::<span class="ident">HeaderName</span>
<span class="op">|</span> <span class="ident">httparse</span>::<span class="ident">Error</span>::<span class="ident">HeaderValue</span>
<span class="op">|</span> <span class="ident">httparse</span>::<span class="ident">Error</span>::<span class="ident">NewLine</span>
<span class="op">|</span> <span class="ident">httparse</span>::<span class="ident">Error</span>::<span class="ident">Token</span> <span class="op">=&gt;</span> <span class="ident">ParseError</span>::<span class="ident">Header</span>,
<span class="ident">httparse</span>::<span class="ident">Error</span>::<span class="ident">Status</span> <span class="op">=&gt;</span> <span class="ident">ParseError</span>::<span class="ident">Status</span>,
<span class="ident">httparse</span>::<span class="ident">Error</span>::<span class="ident">TooManyHeaders</span> <span class="op">=&gt;</span> <span class="ident">ParseError</span>::<span class="ident">TooLarge</span>,
<span class="ident">httparse</span>::<span class="ident">Error</span>::<span class="ident">Version</span> <span class="op">=&gt;</span> <span class="ident">ParseError</span>::<span class="ident">Version</span>,
}
}
}
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Fail</span>, <span class="ident">Debug</span>)]</span>
<span class="doccomment">/// A set of errors that can occur during payload parsing</span>
<span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">PayloadError</span> {
<span class="doccomment">/// A payload reached EOF, but is not complete.</span>
<span class="attribute">#[<span class="ident">fail</span>(<span class="ident">display</span> <span class="op">=</span> <span class="string">&quot;A payload reached EOF, but is not complete.&quot;</span>)]</span>
<span class="ident">Incomplete</span>,
<span class="doccomment">/// Content encoding stream corruption</span>
<span class="attribute">#[<span class="ident">fail</span>(<span class="ident">display</span> <span class="op">=</span> <span class="string">&quot;Can not decode content-encoding.&quot;</span>)]</span>
<span class="ident">EncodingCorrupted</span>,
<span class="doccomment">/// A payload reached size limit.</span>
<span class="attribute">#[<span class="ident">fail</span>(<span class="ident">display</span> <span class="op">=</span> <span class="string">&quot;A payload reached size limit.&quot;</span>)]</span>
<span class="ident">Overflow</span>,
<span class="doccomment">/// A payload length is unknown.</span>
<span class="attribute">#[<span class="ident">fail</span>(<span class="ident">display</span> <span class="op">=</span> <span class="string">&quot;A payload length is unknown.&quot;</span>)]</span>
<span class="ident">UnknownLength</span>,
<span class="doccomment">/// Io error</span>
<span class="attribute">#[<span class="ident">fail</span>(<span class="ident">display</span> <span class="op">=</span> <span class="string">&quot;{}&quot;</span>, <span class="ident">_0</span>)]</span>
<span class="ident">Io</span>(<span class="attribute">#[<span class="ident">cause</span>]</span> <span class="ident">IoError</span>),
<span class="doccomment">/// Http2 error</span>
<span class="attribute">#[<span class="ident">fail</span>(<span class="ident">display</span> <span class="op">=</span> <span class="string">&quot;{}&quot;</span>, <span class="ident">_0</span>)]</span>
<span class="ident">Http2</span>(<span class="attribute">#[<span class="ident">cause</span>]</span> <span class="ident">Http2Error</span>),
}
<span class="kw">impl</span> <span class="ident">From</span><span class="op">&lt;</span><span class="ident">IoError</span><span class="op">&gt;</span> <span class="kw">for</span> <span class="ident">PayloadError</span> {
<span class="kw">fn</span> <span class="ident">from</span>(<span class="ident">err</span>: <span class="ident">IoError</span>) <span class="op">-&gt;</span> <span class="ident">PayloadError</span> {
<span class="ident">PayloadError</span>::<span class="ident">Io</span>(<span class="ident">err</span>)
}
}
<span class="doccomment">/// `PayloadError` returns two possible results:</span>
<span class="doccomment">///</span>
<span class="doccomment">/// - `Overflow` returns `PayloadTooLarge`</span>
<span class="doccomment">/// - Other errors returns `BadRequest`</span>
<span class="kw">impl</span> <span class="ident">ResponseError</span> <span class="kw">for</span> <span class="ident">PayloadError</span> {
<span class="kw">fn</span> <span class="ident">error_response</span>(<span class="kw-2">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</span> <span class="ident">HttpResponse</span> {
<span class="kw">match</span> <span class="kw-2">*</span><span class="self">self</span> {
<span class="ident">PayloadError</span>::<span class="ident">Overflow</span> <span class="op">=&gt;</span> <span class="ident">HttpResponse</span>::<span class="ident">new</span>(<span class="ident">StatusCode</span>::<span class="ident">PAYLOAD_TOO_LARGE</span>),
<span class="kw">_</span> <span class="op">=&gt;</span> <span class="ident">HttpResponse</span>::<span class="ident">new</span>(<span class="ident">StatusCode</span>::<span class="ident">BAD_REQUEST</span>),
}
}
}
<span class="doccomment">/// Return `BadRequest` for `cookie::ParseError`</span>
<span class="kw">impl</span> <span class="ident">ResponseError</span> <span class="kw">for</span> <span class="ident">cookie</span>::<span class="ident">ParseError</span> {
<span class="kw">fn</span> <span class="ident">error_response</span>(<span class="kw-2">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</span> <span class="ident">HttpResponse</span> {
<span class="ident">HttpResponse</span>::<span class="ident">new</span>(<span class="ident">StatusCode</span>::<span class="ident">BAD_REQUEST</span>)
}
}
<span class="doccomment">/// A set of errors that can occur during parsing multipart streams</span>
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Fail</span>, <span class="ident">Debug</span>)]</span>
<span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">MultipartError</span> {
<span class="doccomment">/// Content-Type header is not found</span>
<span class="attribute">#[<span class="ident">fail</span>(<span class="ident">display</span> <span class="op">=</span> <span class="string">&quot;No Content-type header found&quot;</span>)]</span>
<span class="ident">NoContentType</span>,
<span class="doccomment">/// Can not parse Content-Type header</span>
<span class="attribute">#[<span class="ident">fail</span>(<span class="ident">display</span> <span class="op">=</span> <span class="string">&quot;Can not parse Content-Type header&quot;</span>)]</span>
<span class="ident">ParseContentType</span>,
<span class="doccomment">/// Multipart boundary is not found</span>
<span class="attribute">#[<span class="ident">fail</span>(<span class="ident">display</span> <span class="op">=</span> <span class="string">&quot;Multipart boundary is not found&quot;</span>)]</span>
<span class="ident">Boundary</span>,
<span class="doccomment">/// Multipart stream is incomplete</span>
<span class="attribute">#[<span class="ident">fail</span>(<span class="ident">display</span> <span class="op">=</span> <span class="string">&quot;Multipart stream is incomplete&quot;</span>)]</span>
<span class="ident">Incomplete</span>,
<span class="doccomment">/// Error during field parsing</span>
<span class="attribute">#[<span class="ident">fail</span>(<span class="ident">display</span> <span class="op">=</span> <span class="string">&quot;{}&quot;</span>, <span class="ident">_0</span>)]</span>
<span class="ident">Parse</span>(<span class="attribute">#[<span class="ident">cause</span>]</span> <span class="ident">ParseError</span>),
<span class="doccomment">/// Payload error</span>
<span class="attribute">#[<span class="ident">fail</span>(<span class="ident">display</span> <span class="op">=</span> <span class="string">&quot;{}&quot;</span>, <span class="ident">_0</span>)]</span>
<span class="ident">Payload</span>(<span class="attribute">#[<span class="ident">cause</span>]</span> <span class="ident">PayloadError</span>),
}
<span class="kw">impl</span> <span class="ident">From</span><span class="op">&lt;</span><span class="ident">ParseError</span><span class="op">&gt;</span> <span class="kw">for</span> <span class="ident">MultipartError</span> {
<span class="kw">fn</span> <span class="ident">from</span>(<span class="ident">err</span>: <span class="ident">ParseError</span>) <span class="op">-&gt;</span> <span class="ident">MultipartError</span> {
<span class="ident">MultipartError</span>::<span class="ident">Parse</span>(<span class="ident">err</span>)
}
}
<span class="kw">impl</span> <span class="ident">From</span><span class="op">&lt;</span><span class="ident">PayloadError</span><span class="op">&gt;</span> <span class="kw">for</span> <span class="ident">MultipartError</span> {
<span class="kw">fn</span> <span class="ident">from</span>(<span class="ident">err</span>: <span class="ident">PayloadError</span>) <span class="op">-&gt;</span> <span class="ident">MultipartError</span> {
<span class="ident">MultipartError</span>::<span class="ident">Payload</span>(<span class="ident">err</span>)
}
}
<span class="doccomment">/// Return `BadRequest` for `MultipartError`</span>
<span class="kw">impl</span> <span class="ident">ResponseError</span> <span class="kw">for</span> <span class="ident">MultipartError</span> {
<span class="kw">fn</span> <span class="ident">error_response</span>(<span class="kw-2">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</span> <span class="ident">HttpResponse</span> {
<span class="ident">HttpResponse</span>::<span class="ident">new</span>(<span class="ident">StatusCode</span>::<span class="ident">BAD_REQUEST</span>)
}
}
<span class="doccomment">/// Error during handling `Expect` header</span>
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Fail</span>, <span class="ident">PartialEq</span>, <span class="ident">Debug</span>)]</span>
<span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">ExpectError</span> {
<span class="doccomment">/// Expect header value can not be converted to utf8</span>
<span class="attribute">#[<span class="ident">fail</span>(<span class="ident">display</span> <span class="op">=</span> <span class="string">&quot;Expect header value can not be converted to utf8&quot;</span>)]</span>
<span class="ident">Encoding</span>,
<span class="doccomment">/// Unknown expect value</span>
<span class="attribute">#[<span class="ident">fail</span>(<span class="ident">display</span> <span class="op">=</span> <span class="string">&quot;Unknown expect value&quot;</span>)]</span>
<span class="ident">UnknownExpect</span>,
}
<span class="kw">impl</span> <span class="ident">ResponseError</span> <span class="kw">for</span> <span class="ident">ExpectError</span> {
<span class="kw">fn</span> <span class="ident">error_response</span>(<span class="kw-2">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</span> <span class="ident">HttpResponse</span> {
<span class="ident">HttpResponse</span>::<span class="ident">with_body</span>(<span class="ident">StatusCode</span>::<span class="ident">EXPECTATION_FAILED</span>, <span class="string">&quot;Unknown Expect&quot;</span>)
}
}
<span class="doccomment">/// A set of error that can occure during parsing content type</span>
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Fail</span>, <span class="ident">PartialEq</span>, <span class="ident">Debug</span>)]</span>
<span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">ContentTypeError</span> {
<span class="doccomment">/// Can not parse content type</span>
<span class="attribute">#[<span class="ident">fail</span>(<span class="ident">display</span> <span class="op">=</span> <span class="string">&quot;Can not parse content type&quot;</span>)]</span>
<span class="ident">ParseError</span>,
<span class="doccomment">/// Unknown content encoding</span>
<span class="attribute">#[<span class="ident">fail</span>(<span class="ident">display</span> <span class="op">=</span> <span class="string">&quot;Unknown content encoding&quot;</span>)]</span>
<span class="ident">UnknownEncoding</span>,
}
<span class="doccomment">/// Return `BadRequest` for `ContentTypeError`</span>
<span class="kw">impl</span> <span class="ident">ResponseError</span> <span class="kw">for</span> <span class="ident">ContentTypeError</span> {
<span class="kw">fn</span> <span class="ident">error_response</span>(<span class="kw-2">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</span> <span class="ident">HttpResponse</span> {
<span class="ident">HttpResponse</span>::<span class="ident">new</span>(<span class="ident">StatusCode</span>::<span class="ident">BAD_REQUEST</span>)
}
}
<span class="doccomment">/// A set of errors that can occur during parsing urlencoded payloads</span>
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Fail</span>, <span class="ident">Debug</span>)]</span>
<span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">UrlencodedError</span> {
<span class="doccomment">/// Can not decode chunked transfer encoding</span>
<span class="attribute">#[<span class="ident">fail</span>(<span class="ident">display</span> <span class="op">=</span> <span class="string">&quot;Can not decode chunked transfer encoding&quot;</span>)]</span>
<span class="ident">Chunked</span>,
<span class="doccomment">/// Payload size is bigger than allowed. (default: 256kB)</span>
<span class="attribute">#[<span class="ident">fail</span>(
<span class="ident">display</span> <span class="op">=</span> <span class="string">&quot;Urlencoded payload size is bigger than allowed. (default: 256kB)&quot;</span>
)]</span>
<span class="ident">Overflow</span>,
<span class="doccomment">/// Payload size is now known</span>
<span class="attribute">#[<span class="ident">fail</span>(<span class="ident">display</span> <span class="op">=</span> <span class="string">&quot;Payload size is now known&quot;</span>)]</span>
<span class="ident">UnknownLength</span>,
<span class="doccomment">/// Content type error</span>
<span class="attribute">#[<span class="ident">fail</span>(<span class="ident">display</span> <span class="op">=</span> <span class="string">&quot;Content type error&quot;</span>)]</span>
<span class="ident">ContentType</span>,
<span class="doccomment">/// Parse error</span>
<span class="attribute">#[<span class="ident">fail</span>(<span class="ident">display</span> <span class="op">=</span> <span class="string">&quot;Parse error&quot;</span>)]</span>
<span class="ident">Parse</span>,
<span class="doccomment">/// Payload error</span>
<span class="attribute">#[<span class="ident">fail</span>(<span class="ident">display</span> <span class="op">=</span> <span class="string">&quot;Error that occur during reading payload: {}&quot;</span>, <span class="ident">_0</span>)]</span>
<span class="ident">Payload</span>(<span class="attribute">#[<span class="ident">cause</span>]</span> <span class="ident">PayloadError</span>),
}
<span class="doccomment">/// Return `BadRequest` for `UrlencodedError`</span>
<span class="kw">impl</span> <span class="ident">ResponseError</span> <span class="kw">for</span> <span class="ident">UrlencodedError</span> {
<span class="kw">fn</span> <span class="ident">error_response</span>(<span class="kw-2">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</span> <span class="ident">HttpResponse</span> {
<span class="kw">match</span> <span class="kw-2">*</span><span class="self">self</span> {
<span class="ident">UrlencodedError</span>::<span class="ident">Overflow</span> <span class="op">=&gt;</span> {
<span class="ident">HttpResponse</span>::<span class="ident">new</span>(<span class="ident">StatusCode</span>::<span class="ident">PAYLOAD_TOO_LARGE</span>)
}
<span class="ident">UrlencodedError</span>::<span class="ident">UnknownLength</span> <span class="op">=&gt;</span> {
<span class="ident">HttpResponse</span>::<span class="ident">new</span>(<span class="ident">StatusCode</span>::<span class="ident">LENGTH_REQUIRED</span>)
}
<span class="kw">_</span> <span class="op">=&gt;</span> <span class="ident">HttpResponse</span>::<span class="ident">new</span>(<span class="ident">StatusCode</span>::<span class="ident">BAD_REQUEST</span>),
}
}
}
<span class="kw">impl</span> <span class="ident">From</span><span class="op">&lt;</span><span class="ident">PayloadError</span><span class="op">&gt;</span> <span class="kw">for</span> <span class="ident">UrlencodedError</span> {
<span class="kw">fn</span> <span class="ident">from</span>(<span class="ident">err</span>: <span class="ident">PayloadError</span>) <span class="op">-&gt;</span> <span class="ident">UrlencodedError</span> {
<span class="ident">UrlencodedError</span>::<span class="ident">Payload</span>(<span class="ident">err</span>)
}
}
<span class="doccomment">/// A set of errors that can occur during parsing json payloads</span>
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Fail</span>, <span class="ident">Debug</span>)]</span>
<span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">JsonPayloadError</span> {
<span class="doccomment">/// Payload size is bigger than allowed. (default: 256kB)</span>
<span class="attribute">#[<span class="ident">fail</span>(<span class="ident">display</span> <span class="op">=</span> <span class="string">&quot;Json payload size is bigger than allowed. (default: 256kB)&quot;</span>)]</span>
<span class="ident">Overflow</span>,
<span class="doccomment">/// Content type error</span>
<span class="attribute">#[<span class="ident">fail</span>(<span class="ident">display</span> <span class="op">=</span> <span class="string">&quot;Content type error&quot;</span>)]</span>
<span class="ident">ContentType</span>,
<span class="doccomment">/// Deserialize error</span>
<span class="attribute">#[<span class="ident">fail</span>(<span class="ident">display</span> <span class="op">=</span> <span class="string">&quot;Json deserialize error: {}&quot;</span>, <span class="ident">_0</span>)]</span>
<span class="ident">Deserialize</span>(<span class="attribute">#[<span class="ident">cause</span>]</span> <span class="ident">JsonError</span>),
<span class="doccomment">/// Payload error</span>
<span class="attribute">#[<span class="ident">fail</span>(<span class="ident">display</span> <span class="op">=</span> <span class="string">&quot;Error that occur during reading payload: {}&quot;</span>, <span class="ident">_0</span>)]</span>
<span class="ident">Payload</span>(<span class="attribute">#[<span class="ident">cause</span>]</span> <span class="ident">PayloadError</span>),
}
<span class="doccomment">/// Return `BadRequest` for `UrlencodedError`</span>
<span class="kw">impl</span> <span class="ident">ResponseError</span> <span class="kw">for</span> <span class="ident">JsonPayloadError</span> {
<span class="kw">fn</span> <span class="ident">error_response</span>(<span class="kw-2">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</span> <span class="ident">HttpResponse</span> {
<span class="kw">match</span> <span class="kw-2">*</span><span class="self">self</span> {
<span class="ident">JsonPayloadError</span>::<span class="ident">Overflow</span> <span class="op">=&gt;</span> {
<span class="ident">HttpResponse</span>::<span class="ident">new</span>(<span class="ident">StatusCode</span>::<span class="ident">PAYLOAD_TOO_LARGE</span>)
}
<span class="kw">_</span> <span class="op">=&gt;</span> <span class="ident">HttpResponse</span>::<span class="ident">new</span>(<span class="ident">StatusCode</span>::<span class="ident">BAD_REQUEST</span>),
}
}
}
<span class="kw">impl</span> <span class="ident">From</span><span class="op">&lt;</span><span class="ident">PayloadError</span><span class="op">&gt;</span> <span class="kw">for</span> <span class="ident">JsonPayloadError</span> {
<span class="kw">fn</span> <span class="ident">from</span>(<span class="ident">err</span>: <span class="ident">PayloadError</span>) <span class="op">-&gt;</span> <span class="ident">JsonPayloadError</span> {
<span class="ident">JsonPayloadError</span>::<span class="ident">Payload</span>(<span class="ident">err</span>)
}
}
<span class="kw">impl</span> <span class="ident">From</span><span class="op">&lt;</span><span class="ident">JsonError</span><span class="op">&gt;</span> <span class="kw">for</span> <span class="ident">JsonPayloadError</span> {
<span class="kw">fn</span> <span class="ident">from</span>(<span class="ident">err</span>: <span class="ident">JsonError</span>) <span class="op">-&gt;</span> <span class="ident">JsonPayloadError</span> {
<span class="ident">JsonPayloadError</span>::<span class="ident">Deserialize</span>(<span class="ident">err</span>)
}
}
<span class="doccomment">/// Error type returned when reading body as lines.</span>
<span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">ReadlinesError</span> {
<span class="doccomment">/// Error when decoding a line.</span>
<span class="ident">EncodingError</span>,
<span class="doccomment">/// Payload error.</span>
<span class="ident">PayloadError</span>(<span class="ident">PayloadError</span>),
<span class="doccomment">/// Line limit exceeded.</span>
<span class="ident">LimitOverflow</span>,
<span class="doccomment">/// ContentType error.</span>
<span class="ident">ContentTypeError</span>(<span class="ident">ContentTypeError</span>),
}
<span class="kw">impl</span> <span class="ident">From</span><span class="op">&lt;</span><span class="ident">PayloadError</span><span class="op">&gt;</span> <span class="kw">for</span> <span class="ident">ReadlinesError</span> {
<span class="kw">fn</span> <span class="ident">from</span>(<span class="ident">err</span>: <span class="ident">PayloadError</span>) <span class="op">-&gt;</span> <span class="self">Self</span> {
<span class="ident">ReadlinesError</span>::<span class="ident">PayloadError</span>(<span class="ident">err</span>)
}
}
<span class="kw">impl</span> <span class="ident">From</span><span class="op">&lt;</span><span class="ident">ContentTypeError</span><span class="op">&gt;</span> <span class="kw">for</span> <span class="ident">ReadlinesError</span> {
<span class="kw">fn</span> <span class="ident">from</span>(<span class="ident">err</span>: <span class="ident">ContentTypeError</span>) <span class="op">-&gt;</span> <span class="self">Self</span> {
<span class="ident">ReadlinesError</span>::<span class="ident">ContentTypeError</span>(<span class="ident">err</span>)
}
}
<span class="doccomment">/// Errors which can occur when attempting to interpret a segment string as a</span>
<span class="doccomment">/// valid path segment.</span>
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Fail</span>, <span class="ident">Debug</span>, <span class="ident">PartialEq</span>)]</span>
<span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">UriSegmentError</span> {
<span class="doccomment">/// The segment started with the wrapped invalid character.</span>
<span class="attribute">#[<span class="ident">fail</span>(<span class="ident">display</span> <span class="op">=</span> <span class="string">&quot;The segment started with the wrapped invalid character&quot;</span>)]</span>
<span class="ident">BadStart</span>(<span class="ident">char</span>),
<span class="doccomment">/// The segment contained the wrapped invalid character.</span>
<span class="attribute">#[<span class="ident">fail</span>(<span class="ident">display</span> <span class="op">=</span> <span class="string">&quot;The segment contained the wrapped invalid character&quot;</span>)]</span>
<span class="ident">BadChar</span>(<span class="ident">char</span>),
<span class="doccomment">/// The segment ended with the wrapped invalid character.</span>
<span class="attribute">#[<span class="ident">fail</span>(<span class="ident">display</span> <span class="op">=</span> <span class="string">&quot;The segment ended with the wrapped invalid character&quot;</span>)]</span>
<span class="ident">BadEnd</span>(<span class="ident">char</span>),
}
<span class="doccomment">/// Return `BadRequest` for `UriSegmentError`</span>
<span class="kw">impl</span> <span class="ident">ResponseError</span> <span class="kw">for</span> <span class="ident">UriSegmentError</span> {
<span class="kw">fn</span> <span class="ident">error_response</span>(<span class="kw-2">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</span> <span class="ident">HttpResponse</span> {
<span class="ident">HttpResponse</span>::<span class="ident">new</span>(<span class="ident">StatusCode</span>::<span class="ident">BAD_REQUEST</span>)
}
}
<span class="doccomment">/// Errors which can occur when attempting to generate resource uri.</span>
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Fail</span>, <span class="ident">Debug</span>, <span class="ident">PartialEq</span>)]</span>
<span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">UrlGenerationError</span> {
<span class="doccomment">/// Resource not found</span>
<span class="attribute">#[<span class="ident">fail</span>(<span class="ident">display</span> <span class="op">=</span> <span class="string">&quot;Resource not found&quot;</span>)]</span>
<span class="ident">ResourceNotFound</span>,
<span class="doccomment">/// Not all path pattern covered</span>
<span class="attribute">#[<span class="ident">fail</span>(<span class="ident">display</span> <span class="op">=</span> <span class="string">&quot;Not all path pattern covered&quot;</span>)]</span>
<span class="ident">NotEnoughElements</span>,
<span class="doccomment">/// URL parse error</span>
<span class="attribute">#[<span class="ident">fail</span>(<span class="ident">display</span> <span class="op">=</span> <span class="string">&quot;{}&quot;</span>, <span class="ident">_0</span>)]</span>
<span class="ident">ParseError</span>(<span class="attribute">#[<span class="ident">cause</span>]</span> <span class="ident">UrlParseError</span>),
}
<span class="doccomment">/// `InternalServerError` for `UrlGeneratorError`</span>
<span class="kw">impl</span> <span class="ident">ResponseError</span> <span class="kw">for</span> <span class="ident">UrlGenerationError</span> {}
<span class="kw">impl</span> <span class="ident">From</span><span class="op">&lt;</span><span class="ident">UrlParseError</span><span class="op">&gt;</span> <span class="kw">for</span> <span class="ident">UrlGenerationError</span> {
<span class="kw">fn</span> <span class="ident">from</span>(<span class="ident">err</span>: <span class="ident">UrlParseError</span>) <span class="op">-&gt;</span> <span class="self">Self</span> {
<span class="ident">UrlGenerationError</span>::<span class="ident">ParseError</span>(<span class="ident">err</span>)
}
}
<span class="doccomment">/// Errors which can occur when serving static files.</span>
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Fail</span>, <span class="ident">Debug</span>, <span class="ident">PartialEq</span>)]</span>
<span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">StaticFileError</span> {
<span class="doccomment">/// Path is not a directory</span>
<span class="attribute">#[<span class="ident">fail</span>(<span class="ident">display</span> <span class="op">=</span> <span class="string">&quot;Path is not a directory. Unable to serve static files&quot;</span>)]</span>
<span class="ident">IsNotDirectory</span>,
<span class="doccomment">/// Cannot render directory</span>
<span class="attribute">#[<span class="ident">fail</span>(<span class="ident">display</span> <span class="op">=</span> <span class="string">&quot;Unable to render directory without index file&quot;</span>)]</span>
<span class="ident">IsDirectory</span>,
}
<span class="doccomment">/// Return `NotFound` for `StaticFileError`</span>
<span class="kw">impl</span> <span class="ident">ResponseError</span> <span class="kw">for</span> <span class="ident">StaticFileError</span> {
<span class="kw">fn</span> <span class="ident">error_response</span>(<span class="kw-2">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</span> <span class="ident">HttpResponse</span> {
<span class="ident">HttpResponse</span>::<span class="ident">new</span>(<span class="ident">StatusCode</span>::<span class="ident">NOT_FOUND</span>)
}
}
<span class="doccomment">/// Helper type that can wrap any error and generate custom response.</span>
<span class="doccomment">///</span>
<span class="doccomment">/// In following example any `io::Error` will be converted into &quot;BAD REQUEST&quot;</span>
<span class="doccomment">/// response as opposite to *INTERNAL SERVER ERROR* which is defined by</span>
<span class="doccomment">/// default.</span>
<span class="doccomment">///</span>
<span class="doccomment">/// ```rust</span>
<span class="doccomment">/// # extern crate actix_web;</span>
<span class="doccomment">/// # use actix_web::*;</span>
<span class="doccomment">/// use actix_web::fs::NamedFile;</span>
<span class="doccomment">///</span>
<span class="doccomment">/// fn index(req: HttpRequest) -&gt; Result&lt;fs::NamedFile&gt; {</span>
<span class="doccomment">/// let f = NamedFile::open(&quot;test.txt&quot;).map_err(error::ErrorBadRequest)?;</span>
<span class="doccomment">/// Ok(f)</span>
<span class="doccomment">/// }</span>
<span class="doccomment">/// # fn main() {}</span>
<span class="doccomment">/// ```</span>
<span class="kw">pub</span> <span class="kw">struct</span> <span class="ident">InternalError</span><span class="op">&lt;</span><span class="ident">T</span><span class="op">&gt;</span> {
<span class="ident">cause</span>: <span class="ident">T</span>,
<span class="ident">status</span>: <span class="ident">InternalErrorType</span>,
<span class="ident">backtrace</span>: <span class="ident">Backtrace</span>,
}
<span class="kw">enum</span> <span class="ident">InternalErrorType</span> {
<span class="ident">Status</span>(<span class="ident">StatusCode</span>),
<span class="ident">Response</span>(<span class="ident">Box</span><span class="op">&lt;</span><span class="ident">Mutex</span><span class="op">&lt;</span><span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">HttpResponseParts</span><span class="op">&gt;&gt;</span><span class="op">&gt;</span>),
}
<span class="kw">impl</span><span class="op">&lt;</span><span class="ident">T</span><span class="op">&gt;</span> <span class="ident">InternalError</span><span class="op">&lt;</span><span class="ident">T</span><span class="op">&gt;</span> {
<span class="doccomment">/// Create `InternalError` instance</span>
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">new</span>(<span class="ident">cause</span>: <span class="ident">T</span>, <span class="ident">status</span>: <span class="ident">StatusCode</span>) <span class="op">-&gt;</span> <span class="self">Self</span> {
<span class="ident">InternalError</span> {
<span class="ident">cause</span>,
<span class="ident">status</span>: <span class="ident">InternalErrorType</span>::<span class="ident">Status</span>(<span class="ident">status</span>),
<span class="ident">backtrace</span>: <span class="ident">Backtrace</span>::<span class="ident">new</span>(),
}
}
<span class="doccomment">/// Create `InternalError` with predefined `HttpResponse`.</span>
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">from_response</span>(<span class="ident">cause</span>: <span class="ident">T</span>, <span class="ident">response</span>: <span class="ident">HttpResponse</span>) <span class="op">-&gt;</span> <span class="self">Self</span> {
<span class="kw">let</span> <span class="ident">resp</span> <span class="op">=</span> <span class="ident">response</span>.<span class="ident">into_parts</span>();
<span class="ident">InternalError</span> {
<span class="ident">cause</span>,
<span class="ident">status</span>: <span class="ident">InternalErrorType</span>::<span class="ident">Response</span>(<span class="ident">Box</span>::<span class="ident">new</span>(<span class="ident">Mutex</span>::<span class="ident">new</span>(<span class="prelude-val">Some</span>(<span class="ident">resp</span>)))),
<span class="ident">backtrace</span>: <span class="ident">Backtrace</span>::<span class="ident">new</span>(),
}
}
}
<span class="kw">impl</span><span class="op">&lt;</span><span class="ident">T</span><span class="op">&gt;</span> <span class="ident">Fail</span> <span class="kw">for</span> <span class="ident">InternalError</span><span class="op">&lt;</span><span class="ident">T</span><span class="op">&gt;</span>
<span class="kw">where</span>
<span class="ident">T</span>: <span class="ident">Send</span> <span class="op">+</span> <span class="ident">Sync</span> <span class="op">+</span> <span class="ident">fmt</span>::<span class="ident">Debug</span> <span class="op">+</span> <span class="ident">fmt</span>::<span class="ident">Display</span> <span class="op">+</span> <span class="lifetime">&#39;static</span>,
{
<span class="kw">fn</span> <span class="ident">backtrace</span>(<span class="kw-2">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</span> <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="kw-2">&amp;</span><span class="ident">Backtrace</span><span class="op">&gt;</span> {
<span class="prelude-val">Some</span>(<span class="kw-2">&amp;</span><span class="self">self</span>.<span class="ident">backtrace</span>)
}
}
<span class="kw">impl</span><span class="op">&lt;</span><span class="ident">T</span><span class="op">&gt;</span> <span class="ident">fmt</span>::<span class="ident">Debug</span> <span class="kw">for</span> <span class="ident">InternalError</span><span class="op">&lt;</span><span class="ident">T</span><span class="op">&gt;</span>
<span class="kw">where</span>
<span class="ident">T</span>: <span class="ident">Send</span> <span class="op">+</span> <span class="ident">Sync</span> <span class="op">+</span> <span class="ident">fmt</span>::<span class="ident">Debug</span> <span class="op">+</span> <span class="lifetime">&#39;static</span>,
{
<span class="kw">fn</span> <span class="ident">fmt</span>(<span class="kw-2">&amp;</span><span class="self">self</span>, <span class="ident">f</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">fmt</span>::<span class="ident">Formatter</span>) <span class="op">-&gt;</span> <span class="ident">fmt</span>::<span class="prelude-ty">Result</span> {
<span class="ident">fmt</span>::<span class="ident">Debug</span>::<span class="ident">fmt</span>(<span class="kw-2">&amp;</span><span class="self">self</span>.<span class="ident">cause</span>, <span class="ident">f</span>)
}
}
<span class="kw">impl</span><span class="op">&lt;</span><span class="ident">T</span><span class="op">&gt;</span> <span class="ident">fmt</span>::<span class="ident">Display</span> <span class="kw">for</span> <span class="ident">InternalError</span><span class="op">&lt;</span><span class="ident">T</span><span class="op">&gt;</span>
<span class="kw">where</span>
<span class="ident">T</span>: <span class="ident">Send</span> <span class="op">+</span> <span class="ident">Sync</span> <span class="op">+</span> <span class="ident">fmt</span>::<span class="ident">Display</span> <span class="op">+</span> <span class="lifetime">&#39;static</span>,
{
<span class="kw">fn</span> <span class="ident">fmt</span>(<span class="kw-2">&amp;</span><span class="self">self</span>, <span class="ident">f</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">fmt</span>::<span class="ident">Formatter</span>) <span class="op">-&gt;</span> <span class="ident">fmt</span>::<span class="prelude-ty">Result</span> {
<span class="ident">fmt</span>::<span class="ident">Display</span>::<span class="ident">fmt</span>(<span class="kw-2">&amp;</span><span class="self">self</span>.<span class="ident">cause</span>, <span class="ident">f</span>)
}
}
<span class="kw">impl</span><span class="op">&lt;</span><span class="ident">T</span><span class="op">&gt;</span> <span class="ident">ResponseError</span> <span class="kw">for</span> <span class="ident">InternalError</span><span class="op">&lt;</span><span class="ident">T</span><span class="op">&gt;</span>
<span class="kw">where</span>
<span class="ident">T</span>: <span class="ident">Send</span> <span class="op">+</span> <span class="ident">Sync</span> <span class="op">+</span> <span class="ident">fmt</span>::<span class="ident">Debug</span> <span class="op">+</span> <span class="ident">fmt</span>::<span class="ident">Display</span> <span class="op">+</span> <span class="lifetime">&#39;static</span>,
{
<span class="kw">fn</span> <span class="ident">error_response</span>(<span class="kw-2">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</span> <span class="ident">HttpResponse</span> {
<span class="kw">match</span> <span class="self">self</span>.<span class="ident">status</span> {
<span class="ident">InternalErrorType</span>::<span class="ident">Status</span>(<span class="ident">st</span>) <span class="op">=&gt;</span> <span class="ident">HttpResponse</span>::<span class="ident">new</span>(<span class="ident">st</span>),
<span class="ident">InternalErrorType</span>::<span class="ident">Response</span>(<span class="kw-2">ref</span> <span class="ident">resp</span>) <span class="op">=&gt;</span> {
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">resp</span>) <span class="op">=</span> <span class="ident">resp</span>.<span class="ident">lock</span>().<span class="ident">unwrap</span>().<span class="ident">take</span>() {
<span class="ident">HttpResponse</span>::<span class="ident">from_parts</span>(<span class="ident">resp</span>)
} <span class="kw">else</span> {
<span class="ident">HttpResponse</span>::<span class="ident">new</span>(<span class="ident">StatusCode</span>::<span class="ident">INTERNAL_SERVER_ERROR</span>)
}
}
}
}
}
<span class="kw">impl</span><span class="op">&lt;</span><span class="ident">T</span><span class="op">&gt;</span> <span class="ident">Responder</span> <span class="kw">for</span> <span class="ident">InternalError</span><span class="op">&lt;</span><span class="ident">T</span><span class="op">&gt;</span>
<span class="kw">where</span>
<span class="ident">T</span>: <span class="ident">Send</span> <span class="op">+</span> <span class="ident">Sync</span> <span class="op">+</span> <span class="ident">fmt</span>::<span class="ident">Debug</span> <span class="op">+</span> <span class="ident">fmt</span>::<span class="ident">Display</span> <span class="op">+</span> <span class="lifetime">&#39;static</span>,
{
<span class="kw">type</span> <span class="ident">Item</span> <span class="op">=</span> <span class="ident">HttpResponse</span>;
<span class="kw">type</span> <span class="ident">Error</span> <span class="op">=</span> <span class="ident">Error</span>;
<span class="kw">fn</span> <span class="ident">respond_to</span><span class="op">&lt;</span><span class="ident">S</span><span class="op">&gt;</span>(<span class="self">self</span>, <span class="kw">_</span>: <span class="kw-2">&amp;</span><span class="ident">HttpRequest</span><span class="op">&lt;</span><span class="ident">S</span><span class="op">&gt;</span>) <span class="op">-&gt;</span> <span class="prelude-ty">Result</span><span class="op">&lt;</span><span class="ident">HttpResponse</span>, <span class="ident">Error</span><span class="op">&gt;</span> {
<span class="prelude-val">Err</span>(<span class="self">self</span>.<span class="ident">into</span>())
}
}
<span class="doccomment">/// Helper function that creates wrapper of any error and generate *BAD</span>
<span class="doccomment">/// REQUEST* response.</span>
<span class="attribute">#[<span class="ident">allow</span>(<span class="ident">non_snake_case</span>)]</span>
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">ErrorBadRequest</span><span class="op">&lt;</span><span class="ident">T</span><span class="op">&gt;</span>(<span class="ident">err</span>: <span class="ident">T</span>) <span class="op">-&gt;</span> <span class="ident">Error</span>
<span class="kw">where</span>
<span class="ident">T</span>: <span class="ident">Send</span> <span class="op">+</span> <span class="ident">Sync</span> <span class="op">+</span> <span class="ident">fmt</span>::<span class="ident">Debug</span> <span class="op">+</span> <span class="ident">fmt</span>::<span class="ident">Display</span> <span class="op">+</span> <span class="lifetime">&#39;static</span>,
{
<span class="ident">InternalError</span>::<span class="ident">new</span>(<span class="ident">err</span>, <span class="ident">StatusCode</span>::<span class="ident">BAD_REQUEST</span>).<span class="ident">into</span>()
}
<span class="doccomment">/// Helper function that creates wrapper of any error and generate</span>
<span class="doccomment">/// *UNAUTHORIZED* response.</span>
<span class="attribute">#[<span class="ident">allow</span>(<span class="ident">non_snake_case</span>)]</span>
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">ErrorUnauthorized</span><span class="op">&lt;</span><span class="ident">T</span><span class="op">&gt;</span>(<span class="ident">err</span>: <span class="ident">T</span>) <span class="op">-&gt;</span> <span class="ident">Error</span>
<span class="kw">where</span>
<span class="ident">T</span>: <span class="ident">Send</span> <span class="op">+</span> <span class="ident">Sync</span> <span class="op">+</span> <span class="ident">fmt</span>::<span class="ident">Debug</span> <span class="op">+</span> <span class="ident">fmt</span>::<span class="ident">Display</span> <span class="op">+</span> <span class="lifetime">&#39;static</span>,
{
<span class="ident">InternalError</span>::<span class="ident">new</span>(<span class="ident">err</span>, <span class="ident">StatusCode</span>::<span class="ident">UNAUTHORIZED</span>).<span class="ident">into</span>()
}
<span class="doccomment">/// Helper function that creates wrapper of any error and generate *FORBIDDEN*</span>
<span class="doccomment">/// response.</span>
<span class="attribute">#[<span class="ident">allow</span>(<span class="ident">non_snake_case</span>)]</span>
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">ErrorForbidden</span><span class="op">&lt;</span><span class="ident">T</span><span class="op">&gt;</span>(<span class="ident">err</span>: <span class="ident">T</span>) <span class="op">-&gt;</span> <span class="ident">Error</span>
<span class="kw">where</span>
<span class="ident">T</span>: <span class="ident">Send</span> <span class="op">+</span> <span class="ident">Sync</span> <span class="op">+</span> <span class="ident">fmt</span>::<span class="ident">Debug</span> <span class="op">+</span> <span class="ident">fmt</span>::<span class="ident">Display</span> <span class="op">+</span> <span class="lifetime">&#39;static</span>,
{
<span class="ident">InternalError</span>::<span class="ident">new</span>(<span class="ident">err</span>, <span class="ident">StatusCode</span>::<span class="ident">FORBIDDEN</span>).<span class="ident">into</span>()
}
<span class="doccomment">/// Helper function that creates wrapper of any error and generate *NOT FOUND*</span>
<span class="doccomment">/// response.</span>
<span class="attribute">#[<span class="ident">allow</span>(<span class="ident">non_snake_case</span>)]</span>
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">ErrorNotFound</span><span class="op">&lt;</span><span class="ident">T</span><span class="op">&gt;</span>(<span class="ident">err</span>: <span class="ident">T</span>) <span class="op">-&gt;</span> <span class="ident">Error</span>
<span class="kw">where</span>
<span class="ident">T</span>: <span class="ident">Send</span> <span class="op">+</span> <span class="ident">Sync</span> <span class="op">+</span> <span class="ident">fmt</span>::<span class="ident">Debug</span> <span class="op">+</span> <span class="ident">fmt</span>::<span class="ident">Display</span> <span class="op">+</span> <span class="lifetime">&#39;static</span>,
{
<span class="ident">InternalError</span>::<span class="ident">new</span>(<span class="ident">err</span>, <span class="ident">StatusCode</span>::<span class="ident">NOT_FOUND</span>).<span class="ident">into</span>()
}
<span class="doccomment">/// Helper function that creates wrapper of any error and generate *METHOD NOT</span>
<span class="doccomment">/// ALLOWED* response.</span>
<span class="attribute">#[<span class="ident">allow</span>(<span class="ident">non_snake_case</span>)]</span>
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">ErrorMethodNotAllowed</span><span class="op">&lt;</span><span class="ident">T</span><span class="op">&gt;</span>(<span class="ident">err</span>: <span class="ident">T</span>) <span class="op">-&gt;</span> <span class="ident">Error</span>
<span class="kw">where</span>
<span class="ident">T</span>: <span class="ident">Send</span> <span class="op">+</span> <span class="ident">Sync</span> <span class="op">+</span> <span class="ident">fmt</span>::<span class="ident">Debug</span> <span class="op">+</span> <span class="ident">fmt</span>::<span class="ident">Display</span> <span class="op">+</span> <span class="lifetime">&#39;static</span>,
{
<span class="ident">InternalError</span>::<span class="ident">new</span>(<span class="ident">err</span>, <span class="ident">StatusCode</span>::<span class="ident">METHOD_NOT_ALLOWED</span>).<span class="ident">into</span>()
}
<span class="doccomment">/// Helper function that creates wrapper of any error and generate *REQUEST</span>
<span class="doccomment">/// TIMEOUT* response.</span>
<span class="attribute">#[<span class="ident">allow</span>(<span class="ident">non_snake_case</span>)]</span>
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">ErrorRequestTimeout</span><span class="op">&lt;</span><span class="ident">T</span><span class="op">&gt;</span>(<span class="ident">err</span>: <span class="ident">T</span>) <span class="op">-&gt;</span> <span class="ident">Error</span>
<span class="kw">where</span>
<span class="ident">T</span>: <span class="ident">Send</span> <span class="op">+</span> <span class="ident">Sync</span> <span class="op">+</span> <span class="ident">fmt</span>::<span class="ident">Debug</span> <span class="op">+</span> <span class="ident">fmt</span>::<span class="ident">Display</span> <span class="op">+</span> <span class="lifetime">&#39;static</span>,
{
<span class="ident">InternalError</span>::<span class="ident">new</span>(<span class="ident">err</span>, <span class="ident">StatusCode</span>::<span class="ident">REQUEST_TIMEOUT</span>).<span class="ident">into</span>()
}
<span class="doccomment">/// Helper function that creates wrapper of any error and generate *CONFLICT*</span>
<span class="doccomment">/// response.</span>
<span class="attribute">#[<span class="ident">allow</span>(<span class="ident">non_snake_case</span>)]</span>
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">ErrorConflict</span><span class="op">&lt;</span><span class="ident">T</span><span class="op">&gt;</span>(<span class="ident">err</span>: <span class="ident">T</span>) <span class="op">-&gt;</span> <span class="ident">Error</span>
<span class="kw">where</span>
<span class="ident">T</span>: <span class="ident">Send</span> <span class="op">+</span> <span class="ident">Sync</span> <span class="op">+</span> <span class="ident">fmt</span>::<span class="ident">Debug</span> <span class="op">+</span> <span class="ident">fmt</span>::<span class="ident">Display</span> <span class="op">+</span> <span class="lifetime">&#39;static</span>,
{
<span class="ident">InternalError</span>::<span class="ident">new</span>(<span class="ident">err</span>, <span class="ident">StatusCode</span>::<span class="ident">CONFLICT</span>).<span class="ident">into</span>()
}
<span class="doccomment">/// Helper function that creates wrapper of any error and generate *GONE*</span>
<span class="doccomment">/// response.</span>
<span class="attribute">#[<span class="ident">allow</span>(<span class="ident">non_snake_case</span>)]</span>
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">ErrorGone</span><span class="op">&lt;</span><span class="ident">T</span><span class="op">&gt;</span>(<span class="ident">err</span>: <span class="ident">T</span>) <span class="op">-&gt;</span> <span class="ident">Error</span>
<span class="kw">where</span>
<span class="ident">T</span>: <span class="ident">Send</span> <span class="op">+</span> <span class="ident">Sync</span> <span class="op">+</span> <span class="ident">fmt</span>::<span class="ident">Debug</span> <span class="op">+</span> <span class="ident">fmt</span>::<span class="ident">Display</span> <span class="op">+</span> <span class="lifetime">&#39;static</span>,
{
<span class="ident">InternalError</span>::<span class="ident">new</span>(<span class="ident">err</span>, <span class="ident">StatusCode</span>::<span class="ident">GONE</span>).<span class="ident">into</span>()
}
<span class="doccomment">/// Helper function that creates wrapper of any error and generate</span>
<span class="doccomment">/// *PRECONDITION FAILED* response.</span>
<span class="attribute">#[<span class="ident">allow</span>(<span class="ident">non_snake_case</span>)]</span>
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">ErrorPreconditionFailed</span><span class="op">&lt;</span><span class="ident">T</span><span class="op">&gt;</span>(<span class="ident">err</span>: <span class="ident">T</span>) <span class="op">-&gt;</span> <span class="ident">Error</span>
<span class="kw">where</span>
<span class="ident">T</span>: <span class="ident">Send</span> <span class="op">+</span> <span class="ident">Sync</span> <span class="op">+</span> <span class="ident">fmt</span>::<span class="ident">Debug</span> <span class="op">+</span> <span class="ident">fmt</span>::<span class="ident">Display</span> <span class="op">+</span> <span class="lifetime">&#39;static</span>,
{
<span class="ident">InternalError</span>::<span class="ident">new</span>(<span class="ident">err</span>, <span class="ident">StatusCode</span>::<span class="ident">PRECONDITION_FAILED</span>).<span class="ident">into</span>()
}
<span class="doccomment">/// Helper function that creates wrapper of any error and generate</span>
<span class="doccomment">/// *EXPECTATION FAILED* response.</span>
<span class="attribute">#[<span class="ident">allow</span>(<span class="ident">non_snake_case</span>)]</span>
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">ErrorExpectationFailed</span><span class="op">&lt;</span><span class="ident">T</span><span class="op">&gt;</span>(<span class="ident">err</span>: <span class="ident">T</span>) <span class="op">-&gt;</span> <span class="ident">Error</span>
<span class="kw">where</span>
<span class="ident">T</span>: <span class="ident">Send</span> <span class="op">+</span> <span class="ident">Sync</span> <span class="op">+</span> <span class="ident">fmt</span>::<span class="ident">Debug</span> <span class="op">+</span> <span class="ident">fmt</span>::<span class="ident">Display</span> <span class="op">+</span> <span class="lifetime">&#39;static</span>,
{
<span class="ident">InternalError</span>::<span class="ident">new</span>(<span class="ident">err</span>, <span class="ident">StatusCode</span>::<span class="ident">EXPECTATION_FAILED</span>).<span class="ident">into</span>()
}
<span class="doccomment">/// Helper function that creates wrapper of any error and</span>
<span class="doccomment">/// generate *INTERNAL SERVER ERROR* response.</span>
<span class="attribute">#[<span class="ident">allow</span>(<span class="ident">non_snake_case</span>)]</span>
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">ErrorInternalServerError</span><span class="op">&lt;</span><span class="ident">T</span><span class="op">&gt;</span>(<span class="ident">err</span>: <span class="ident">T</span>) <span class="op">-&gt;</span> <span class="ident">Error</span>
<span class="kw">where</span>
<span class="ident">T</span>: <span class="ident">Send</span> <span class="op">+</span> <span class="ident">Sync</span> <span class="op">+</span> <span class="ident">fmt</span>::<span class="ident">Debug</span> <span class="op">+</span> <span class="ident">fmt</span>::<span class="ident">Display</span> <span class="op">+</span> <span class="lifetime">&#39;static</span>,
{
<span class="ident">InternalError</span>::<span class="ident">new</span>(<span class="ident">err</span>, <span class="ident">StatusCode</span>::<span class="ident">INTERNAL_SERVER_ERROR</span>).<span class="ident">into</span>()
}
<span class="doccomment">/// Helper function that creates wrapper of any error and</span>
<span class="doccomment">/// generate *NOT IMPLEMENTED* response.</span>
<span class="attribute">#[<span class="ident">allow</span>(<span class="ident">non_snake_case</span>)]</span>
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">ErrorNotImplemented</span><span class="op">&lt;</span><span class="ident">T</span><span class="op">&gt;</span>(<span class="ident">err</span>: <span class="ident">T</span>) <span class="op">-&gt;</span> <span class="ident">Error</span>
<span class="kw">where</span>
<span class="ident">T</span>: <span class="ident">Send</span> <span class="op">+</span> <span class="ident">Sync</span> <span class="op">+</span> <span class="ident">fmt</span>::<span class="ident">Debug</span> <span class="op">+</span> <span class="ident">fmt</span>::<span class="ident">Display</span> <span class="op">+</span> <span class="lifetime">&#39;static</span>,
{
<span class="ident">InternalError</span>::<span class="ident">new</span>(<span class="ident">err</span>, <span class="ident">StatusCode</span>::<span class="ident">NOT_IMPLEMENTED</span>).<span class="ident">into</span>()
}
<span class="doccomment">/// Helper function that creates wrapper of any error and</span>
<span class="doccomment">/// generate *BAD GATEWAY* response.</span>
<span class="attribute">#[<span class="ident">allow</span>(<span class="ident">non_snake_case</span>)]</span>
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">ErrorBadGateway</span><span class="op">&lt;</span><span class="ident">T</span><span class="op">&gt;</span>(<span class="ident">err</span>: <span class="ident">T</span>) <span class="op">-&gt;</span> <span class="ident">Error</span>
<span class="kw">where</span>
<span class="ident">T</span>: <span class="ident">Send</span> <span class="op">+</span> <span class="ident">Sync</span> <span class="op">+</span> <span class="ident">fmt</span>::<span class="ident">Debug</span> <span class="op">+</span> <span class="ident">fmt</span>::<span class="ident">Display</span> <span class="op">+</span> <span class="lifetime">&#39;static</span>,
{
<span class="ident">InternalError</span>::<span class="ident">new</span>(<span class="ident">err</span>, <span class="ident">StatusCode</span>::<span class="ident">BAD_GATEWAY</span>).<span class="ident">into</span>()
}
<span class="doccomment">/// Helper function that creates wrapper of any error and</span>
<span class="doccomment">/// generate *SERVICE UNAVAILABLE* response.</span>
<span class="attribute">#[<span class="ident">allow</span>(<span class="ident">non_snake_case</span>)]</span>
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">ErrorServiceUnavailable</span><span class="op">&lt;</span><span class="ident">T</span><span class="op">&gt;</span>(<span class="ident">err</span>: <span class="ident">T</span>) <span class="op">-&gt;</span> <span class="ident">Error</span>
<span class="kw">where</span>
<span class="ident">T</span>: <span class="ident">Send</span> <span class="op">+</span> <span class="ident">Sync</span> <span class="op">+</span> <span class="ident">fmt</span>::<span class="ident">Debug</span> <span class="op">+</span> <span class="ident">fmt</span>::<span class="ident">Display</span> <span class="op">+</span> <span class="lifetime">&#39;static</span>,
{
<span class="ident">InternalError</span>::<span class="ident">new</span>(<span class="ident">err</span>, <span class="ident">StatusCode</span>::<span class="ident">SERVICE_UNAVAILABLE</span>).<span class="ident">into</span>()
}
<span class="doccomment">/// Helper function that creates wrapper of any error and</span>
<span class="doccomment">/// generate *GATEWAY TIMEOUT* response.</span>
<span class="attribute">#[<span class="ident">allow</span>(<span class="ident">non_snake_case</span>)]</span>
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">ErrorGatewayTimeout</span><span class="op">&lt;</span><span class="ident">T</span><span class="op">&gt;</span>(<span class="ident">err</span>: <span class="ident">T</span>) <span class="op">-&gt;</span> <span class="ident">Error</span>
<span class="kw">where</span>
<span class="ident">T</span>: <span class="ident">Send</span> <span class="op">+</span> <span class="ident">Sync</span> <span class="op">+</span> <span class="ident">fmt</span>::<span class="ident">Debug</span> <span class="op">+</span> <span class="ident">fmt</span>::<span class="ident">Display</span> <span class="op">+</span> <span class="lifetime">&#39;static</span>,
{
<span class="ident">InternalError</span>::<span class="ident">new</span>(<span class="ident">err</span>, <span class="ident">StatusCode</span>::<span class="ident">GATEWAY_TIMEOUT</span>).<span class="ident">into</span>()
}
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">test</span>)]</span>
<span class="kw">mod</span> <span class="ident">tests</span> {
<span class="kw">use</span> <span class="kw">super</span>::<span class="kw-2">*</span>;
<span class="kw">use</span> <span class="ident">cookie</span>::<span class="ident">ParseError</span> <span class="kw">as</span> <span class="ident">CookieParseError</span>;
<span class="kw">use</span> <span class="ident">failure</span>;
<span class="kw">use</span> <span class="ident">http</span>::{<span class="ident">Error</span> <span class="kw">as</span> <span class="ident">HttpError</span>, <span class="ident">StatusCode</span>};
<span class="kw">use</span> <span class="ident">httparse</span>;
<span class="kw">use</span> <span class="ident">std</span>::<span class="ident">env</span>;
<span class="kw">use</span> <span class="ident">std</span>::<span class="ident">error</span>::<span class="ident">Error</span> <span class="kw">as</span> <span class="ident">StdError</span>;
<span class="kw">use</span> <span class="ident">std</span>::<span class="ident">io</span>;
<span class="attribute">#[<span class="ident">test</span>]</span>
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">actix_nightly</span>)]</span>
<span class="kw">fn</span> <span class="ident">test_nightly</span>() {
<span class="kw">let</span> <span class="ident">resp</span>: <span class="ident">HttpResponse</span> <span class="op">=</span>
<span class="ident">IoError</span>::<span class="ident">new</span>(<span class="ident">io</span>::<span class="ident">ErrorKind</span>::<span class="ident">Other</span>, <span class="string">&quot;test&quot;</span>).<span class="ident">error_response</span>();
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">resp</span>.<span class="ident">status</span>(), <span class="ident">StatusCode</span>::<span class="ident">INTERNAL_SERVER_ERROR</span>);
}
<span class="attribute">#[<span class="ident">test</span>]</span>
<span class="kw">fn</span> <span class="ident">test_into_response</span>() {
<span class="kw">let</span> <span class="ident">resp</span>: <span class="ident">HttpResponse</span> <span class="op">=</span> <span class="ident">ParseError</span>::<span class="ident">Incomplete</span>.<span class="ident">error_response</span>();
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">resp</span>.<span class="ident">status</span>(), <span class="ident">StatusCode</span>::<span class="ident">BAD_REQUEST</span>);
<span class="kw">let</span> <span class="ident">resp</span>: <span class="ident">HttpResponse</span> <span class="op">=</span> <span class="ident">CookieParseError</span>::<span class="ident">EmptyName</span>.<span class="ident">error_response</span>();
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">resp</span>.<span class="ident">status</span>(), <span class="ident">StatusCode</span>::<span class="ident">BAD_REQUEST</span>);
<span class="kw">let</span> <span class="ident">resp</span>: <span class="ident">HttpResponse</span> <span class="op">=</span> <span class="ident">MultipartError</span>::<span class="ident">Boundary</span>.<span class="ident">error_response</span>();
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">resp</span>.<span class="ident">status</span>(), <span class="ident">StatusCode</span>::<span class="ident">BAD_REQUEST</span>);
<span class="kw">let</span> <span class="ident">err</span>: <span class="ident">HttpError</span> <span class="op">=</span> <span class="ident">StatusCode</span>::<span class="ident">from_u16</span>(<span class="number">10000</span>).<span class="ident">err</span>().<span class="ident">unwrap</span>().<span class="ident">into</span>();
<span class="kw">let</span> <span class="ident">resp</span>: <span class="ident">HttpResponse</span> <span class="op">=</span> <span class="ident">err</span>.<span class="ident">error_response</span>();
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">resp</span>.<span class="ident">status</span>(), <span class="ident">StatusCode</span>::<span class="ident">INTERNAL_SERVER_ERROR</span>);
}
<span class="attribute">#[<span class="ident">test</span>]</span>
<span class="kw">fn</span> <span class="ident">test_as_fail</span>() {
<span class="kw">let</span> <span class="ident">orig</span> <span class="op">=</span> <span class="ident">io</span>::<span class="ident">Error</span>::<span class="ident">new</span>(<span class="ident">io</span>::<span class="ident">ErrorKind</span>::<span class="ident">Other</span>, <span class="string">&quot;other&quot;</span>);
<span class="kw">let</span> <span class="ident">desc</span> <span class="op">=</span> <span class="ident">orig</span>.<span class="ident">description</span>().<span class="ident">to_owned</span>();
<span class="kw">let</span> <span class="ident">e</span> <span class="op">=</span> <span class="ident">ParseError</span>::<span class="ident">Io</span>(<span class="ident">orig</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="macro">format</span><span class="macro">!</span>(<span class="string">&quot;{}&quot;</span>, <span class="ident">e</span>.<span class="ident">cause</span>().<span class="ident">unwrap</span>()), <span class="ident">desc</span>);
}
<span class="attribute">#[<span class="ident">test</span>]</span>
<span class="kw">fn</span> <span class="ident">test_backtrace</span>() {
<span class="kw">let</span> <span class="ident">e</span> <span class="op">=</span> <span class="ident">ErrorBadRequest</span>(<span class="string">&quot;err&quot;</span>);
<span class="kw">let</span> <span class="kw">_</span> <span class="op">=</span> <span class="ident">e</span>.<span class="ident">backtrace</span>();
}
<span class="attribute">#[<span class="ident">test</span>]</span>
<span class="kw">fn</span> <span class="ident">test_error_cause</span>() {
<span class="kw">let</span> <span class="ident">orig</span> <span class="op">=</span> <span class="ident">io</span>::<span class="ident">Error</span>::<span class="ident">new</span>(<span class="ident">io</span>::<span class="ident">ErrorKind</span>::<span class="ident">Other</span>, <span class="string">&quot;other&quot;</span>);
<span class="kw">let</span> <span class="ident">desc</span> <span class="op">=</span> <span class="ident">orig</span>.<span class="ident">description</span>().<span class="ident">to_owned</span>();
<span class="kw">let</span> <span class="ident">e</span> <span class="op">=</span> <span class="ident">Error</span>::<span class="ident">from</span>(<span class="ident">orig</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="macro">format</span><span class="macro">!</span>(<span class="string">&quot;{}&quot;</span>, <span class="ident">e</span>.<span class="ident">as_fail</span>()), <span class="ident">desc</span>);
}
<span class="attribute">#[<span class="ident">test</span>]</span>
<span class="kw">fn</span> <span class="ident">test_error_display</span>() {
<span class="kw">let</span> <span class="ident">orig</span> <span class="op">=</span> <span class="ident">io</span>::<span class="ident">Error</span>::<span class="ident">new</span>(<span class="ident">io</span>::<span class="ident">ErrorKind</span>::<span class="ident">Other</span>, <span class="string">&quot;other&quot;</span>);
<span class="kw">let</span> <span class="ident">desc</span> <span class="op">=</span> <span class="ident">orig</span>.<span class="ident">description</span>().<span class="ident">to_owned</span>();
<span class="kw">let</span> <span class="ident">e</span> <span class="op">=</span> <span class="ident">Error</span>::<span class="ident">from</span>(<span class="ident">orig</span>);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="macro">format</span><span class="macro">!</span>(<span class="string">&quot;{}&quot;</span>, <span class="ident">e</span>), <span class="ident">desc</span>);
}
<span class="attribute">#[<span class="ident">test</span>]</span>
<span class="kw">fn</span> <span class="ident">test_error_http_response</span>() {
<span class="kw">let</span> <span class="ident">orig</span> <span class="op">=</span> <span class="ident">io</span>::<span class="ident">Error</span>::<span class="ident">new</span>(<span class="ident">io</span>::<span class="ident">ErrorKind</span>::<span class="ident">Other</span>, <span class="string">&quot;other&quot;</span>);
<span class="kw">let</span> <span class="ident">e</span> <span class="op">=</span> <span class="ident">Error</span>::<span class="ident">from</span>(<span class="ident">orig</span>);
<span class="kw">let</span> <span class="ident">resp</span>: <span class="ident">HttpResponse</span> <span class="op">=</span> <span class="ident">e</span>.<span class="ident">into</span>();
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">resp</span>.<span class="ident">status</span>(), <span class="ident">StatusCode</span>::<span class="ident">INTERNAL_SERVER_ERROR</span>);
}
<span class="attribute">#[<span class="ident">test</span>]</span>
<span class="kw">fn</span> <span class="ident">test_expect_error</span>() {
<span class="kw">let</span> <span class="ident">resp</span>: <span class="ident">HttpResponse</span> <span class="op">=</span> <span class="ident">ExpectError</span>::<span class="ident">Encoding</span>.<span class="ident">error_response</span>();
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">resp</span>.<span class="ident">status</span>(), <span class="ident">StatusCode</span>::<span class="ident">EXPECTATION_FAILED</span>);
<span class="kw">let</span> <span class="ident">resp</span>: <span class="ident">HttpResponse</span> <span class="op">=</span> <span class="ident">ExpectError</span>::<span class="ident">UnknownExpect</span>.<span class="ident">error_response</span>();
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">resp</span>.<span class="ident">status</span>(), <span class="ident">StatusCode</span>::<span class="ident">EXPECTATION_FAILED</span>);
}
<span class="macro">macro_rules</span><span class="macro">!</span> <span class="ident">from</span> {
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">from</span>:<span class="ident">expr</span> <span class="op">=&gt;</span> <span class="macro-nonterminal">$</span><span class="macro-nonterminal">error</span>:<span class="ident">pat</span>) <span class="op">=&gt;</span> {
<span class="kw">match</span> <span class="ident">ParseError</span>::<span class="ident">from</span>(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">from</span>) {
<span class="ident">e</span> @ <span class="macro-nonterminal">$</span><span class="macro-nonterminal">error</span> <span class="op">=&gt;</span> {
<span class="macro">assert</span><span class="macro">!</span>(<span class="macro">format</span><span class="macro">!</span>(<span class="string">&quot;{}&quot;</span>, <span class="ident">e</span>).<span class="ident">len</span>() <span class="op">&gt;=</span> <span class="number">5</span>);
}
<span class="ident">e</span> <span class="op">=&gt;</span> <span class="macro">unreachable</span><span class="macro">!</span>(<span class="string">&quot;{:?}&quot;</span>, <span class="ident">e</span>),
}
};
}
<span class="macro">macro_rules</span><span class="macro">!</span> <span class="ident">from_and_cause</span> {
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">from</span>:<span class="ident">expr</span> <span class="op">=&gt;</span> <span class="macro-nonterminal">$</span><span class="macro-nonterminal">error</span>:<span class="ident">pat</span>) <span class="op">=&gt;</span> {
<span class="kw">match</span> <span class="ident">ParseError</span>::<span class="ident">from</span>(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">from</span>) {
<span class="ident">e</span> @ <span class="macro-nonterminal">$</span><span class="macro-nonterminal">error</span> <span class="op">=&gt;</span> {
<span class="kw">let</span> <span class="ident">desc</span> <span class="op">=</span> <span class="macro">format</span><span class="macro">!</span>(<span class="string">&quot;{}&quot;</span>, <span class="ident">e</span>.<span class="ident">cause</span>().<span class="ident">unwrap</span>());
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">desc</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">from</span>.<span class="ident">description</span>().<span class="ident">to_owned</span>());
}
<span class="kw">_</span> <span class="op">=&gt;</span> <span class="macro">unreachable</span><span class="macro">!</span>(<span class="string">&quot;{:?}&quot;</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">from</span>),
}
};
}
<span class="attribute">#[<span class="ident">test</span>]</span>
<span class="kw">fn</span> <span class="ident">test_from</span>() {
<span class="macro">from_and_cause</span><span class="macro">!</span>(<span class="ident">io</span>::<span class="ident">Error</span>::<span class="ident">new</span>(<span class="ident">io</span>::<span class="ident">ErrorKind</span>::<span class="ident">Other</span>, <span class="string">&quot;other&quot;</span>) <span class="op">=&gt;</span> <span class="ident">ParseError</span>::<span class="ident">Io</span>(..));
<span class="macro">from</span><span class="macro">!</span>(<span class="ident">httparse</span>::<span class="ident">Error</span>::<span class="ident">HeaderName</span> <span class="op">=&gt;</span> <span class="ident">ParseError</span>::<span class="ident">Header</span>);
<span class="macro">from</span><span class="macro">!</span>(<span class="ident">httparse</span>::<span class="ident">Error</span>::<span class="ident">HeaderName</span> <span class="op">=&gt;</span> <span class="ident">ParseError</span>::<span class="ident">Header</span>);
<span class="macro">from</span><span class="macro">!</span>(<span class="ident">httparse</span>::<span class="ident">Error</span>::<span class="ident">HeaderValue</span> <span class="op">=&gt;</span> <span class="ident">ParseError</span>::<span class="ident">Header</span>);
<span class="macro">from</span><span class="macro">!</span>(<span class="ident">httparse</span>::<span class="ident">Error</span>::<span class="ident">NewLine</span> <span class="op">=&gt;</span> <span class="ident">ParseError</span>::<span class="ident">Header</span>);
<span class="macro">from</span><span class="macro">!</span>(<span class="ident">httparse</span>::<span class="ident">Error</span>::<span class="ident">Status</span> <span class="op">=&gt;</span> <span class="ident">ParseError</span>::<span class="ident">Status</span>);
<span class="macro">from</span><span class="macro">!</span>(<span class="ident">httparse</span>::<span class="ident">Error</span>::<span class="ident">Token</span> <span class="op">=&gt;</span> <span class="ident">ParseError</span>::<span class="ident">Header</span>);
<span class="macro">from</span><span class="macro">!</span>(<span class="ident">httparse</span>::<span class="ident">Error</span>::<span class="ident">TooManyHeaders</span> <span class="op">=&gt;</span> <span class="ident">ParseError</span>::<span class="ident">TooLarge</span>);
<span class="macro">from</span><span class="macro">!</span>(<span class="ident">httparse</span>::<span class="ident">Error</span>::<span class="ident">Version</span> <span class="op">=&gt;</span> <span class="ident">ParseError</span>::<span class="ident">Version</span>);
}
<span class="attribute">#[<span class="ident">test</span>]</span>
<span class="kw">fn</span> <span class="ident">failure_error</span>() {
<span class="kw">const</span> <span class="ident">NAME</span>: <span class="kw-2">&amp;</span><span class="ident">str</span> <span class="op">=</span> <span class="string">&quot;RUST_BACKTRACE&quot;</span>;
<span class="kw">let</span> <span class="ident">old_tb</span> <span class="op">=</span> <span class="ident">env</span>::<span class="ident">var</span>(<span class="ident">NAME</span>);
<span class="ident">env</span>::<span class="ident">set_var</span>(<span class="ident">NAME</span>, <span class="string">&quot;0&quot;</span>);
<span class="kw">let</span> <span class="ident">error</span> <span class="op">=</span> <span class="ident">failure</span>::<span class="ident">err_msg</span>(<span class="string">&quot;Hello!&quot;</span>);
<span class="kw">let</span> <span class="ident">resp</span>: <span class="ident">Error</span> <span class="op">=</span> <span class="ident">error</span>.<span class="ident">into</span>();
<span class="macro">assert_eq</span><span class="macro">!</span>(
<span class="macro">format</span><span class="macro">!</span>(<span class="string">&quot;{:?}&quot;</span>, <span class="ident">resp</span>),
<span class="string">&quot;Compat { error: ErrorMessage { msg: \&quot;Hello!\&quot; } }\n\n&quot;</span>
);
<span class="kw">match</span> <span class="ident">old_tb</span> {
<span class="prelude-val">Ok</span>(<span class="ident">x</span>) <span class="op">=&gt;</span> <span class="ident">env</span>::<span class="ident">set_var</span>(<span class="ident">NAME</span>, <span class="ident">x</span>),
<span class="kw">_</span> <span class="op">=&gt;</span> <span class="ident">env</span>::<span class="ident">remove_var</span>(<span class="ident">NAME</span>),
}
}
<span class="attribute">#[<span class="ident">test</span>]</span>
<span class="kw">fn</span> <span class="ident">test_internal_error</span>() {
<span class="kw">let</span> <span class="ident">err</span> <span class="op">=</span> <span class="ident">InternalError</span>::<span class="ident">from_response</span>(
<span class="ident">ExpectError</span>::<span class="ident">Encoding</span>,
<span class="ident">HttpResponse</span>::<span class="prelude-val">Ok</span>().<span class="ident">into</span>(),
);
<span class="kw">let</span> <span class="ident">resp</span>: <span class="ident">HttpResponse</span> <span class="op">=</span> <span class="ident">err</span>.<span class="ident">error_response</span>();
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">resp</span>.<span class="ident">status</span>(), <span class="ident">StatusCode</span>::<span class="ident">OK</span>);
}
<span class="attribute">#[<span class="ident">test</span>]</span>
<span class="kw">fn</span> <span class="ident">test_error_downcasting_direct</span>() {
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Debug</span>, <span class="ident">Fail</span>)]</span>
<span class="attribute">#[<span class="ident">fail</span>(<span class="ident">display</span> <span class="op">=</span> <span class="string">&quot;demo error&quot;</span>)]</span>
<span class="kw">struct</span> <span class="ident">DemoError</span>;
<span class="kw">impl</span> <span class="ident">ResponseError</span> <span class="kw">for</span> <span class="ident">DemoError</span> {}
<span class="kw">let</span> <span class="ident">err</span>: <span class="ident">Error</span> <span class="op">=</span> <span class="ident">DemoError</span>.<span class="ident">into</span>();
<span class="kw">let</span> <span class="ident">err_ref</span>: <span class="kw-2">&amp;</span><span class="ident">DemoError</span> <span class="op">=</span> <span class="ident">err</span>.<span class="ident">downcast_ref</span>().<span class="ident">unwrap</span>();
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">err_ref</span>.<span class="ident">to_string</span>(), <span class="string">&quot;demo error&quot;</span>);
}
<span class="attribute">#[<span class="ident">test</span>]</span>
<span class="kw">fn</span> <span class="ident">test_error_downcasting_compat</span>() {
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Debug</span>, <span class="ident">Fail</span>)]</span>
<span class="attribute">#[<span class="ident">fail</span>(<span class="ident">display</span> <span class="op">=</span> <span class="string">&quot;demo error&quot;</span>)]</span>
<span class="kw">struct</span> <span class="ident">DemoError</span>;
<span class="kw">impl</span> <span class="ident">ResponseError</span> <span class="kw">for</span> <span class="ident">DemoError</span> {}
<span class="kw">let</span> <span class="ident">err</span>: <span class="ident">Error</span> <span class="op">=</span> <span class="ident">failure</span>::<span class="ident">Error</span>::<span class="ident">from</span>(<span class="ident">DemoError</span>).<span class="ident">into</span>();
<span class="kw">let</span> <span class="ident">err_ref</span>: <span class="kw-2">&amp;</span><span class="ident">DemoError</span> <span class="op">=</span> <span class="ident">err</span>.<span class="ident">downcast_ref</span>().<span class="ident">unwrap</span>();
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">err_ref</span>.<span class="ident">to_string</span>(), <span class="string">&quot;demo error&quot;</span>);
}
<span class="attribute">#[<span class="ident">test</span>]</span>
<span class="kw">fn</span> <span class="ident">test_error_helpers</span>() {
<span class="kw">let</span> <span class="ident">r</span>: <span class="ident">HttpResponse</span> <span class="op">=</span> <span class="ident">ErrorBadRequest</span>(<span class="string">&quot;err&quot;</span>).<span class="ident">into</span>();
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">r</span>.<span class="ident">status</span>(), <span class="ident">StatusCode</span>::<span class="ident">BAD_REQUEST</span>);
<span class="kw">let</span> <span class="ident">r</span>: <span class="ident">HttpResponse</span> <span class="op">=</span> <span class="ident">ErrorUnauthorized</span>(<span class="string">&quot;err&quot;</span>).<span class="ident">into</span>();
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">r</span>.<span class="ident">status</span>(), <span class="ident">StatusCode</span>::<span class="ident">UNAUTHORIZED</span>);
<span class="kw">let</span> <span class="ident">r</span>: <span class="ident">HttpResponse</span> <span class="op">=</span> <span class="ident">ErrorForbidden</span>(<span class="string">&quot;err&quot;</span>).<span class="ident">into</span>();
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">r</span>.<span class="ident">status</span>(), <span class="ident">StatusCode</span>::<span class="ident">FORBIDDEN</span>);
<span class="kw">let</span> <span class="ident">r</span>: <span class="ident">HttpResponse</span> <span class="op">=</span> <span class="ident">ErrorNotFound</span>(<span class="string">&quot;err&quot;</span>).<span class="ident">into</span>();
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">r</span>.<span class="ident">status</span>(), <span class="ident">StatusCode</span>::<span class="ident">NOT_FOUND</span>);
<span class="kw">let</span> <span class="ident">r</span>: <span class="ident">HttpResponse</span> <span class="op">=</span> <span class="ident">ErrorMethodNotAllowed</span>(<span class="string">&quot;err&quot;</span>).<span class="ident">into</span>();
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">r</span>.<span class="ident">status</span>(), <span class="ident">StatusCode</span>::<span class="ident">METHOD_NOT_ALLOWED</span>);
<span class="kw">let</span> <span class="ident">r</span>: <span class="ident">HttpResponse</span> <span class="op">=</span> <span class="ident">ErrorRequestTimeout</span>(<span class="string">&quot;err&quot;</span>).<span class="ident">into</span>();
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">r</span>.<span class="ident">status</span>(), <span class="ident">StatusCode</span>::<span class="ident">REQUEST_TIMEOUT</span>);
<span class="kw">let</span> <span class="ident">r</span>: <span class="ident">HttpResponse</span> <span class="op">=</span> <span class="ident">ErrorConflict</span>(<span class="string">&quot;err&quot;</span>).<span class="ident">into</span>();
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">r</span>.<span class="ident">status</span>(), <span class="ident">StatusCode</span>::<span class="ident">CONFLICT</span>);
<span class="kw">let</span> <span class="ident">r</span>: <span class="ident">HttpResponse</span> <span class="op">=</span> <span class="ident">ErrorGone</span>(<span class="string">&quot;err&quot;</span>).<span class="ident">into</span>();
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">r</span>.<span class="ident">status</span>(), <span class="ident">StatusCode</span>::<span class="ident">GONE</span>);
<span class="kw">let</span> <span class="ident">r</span>: <span class="ident">HttpResponse</span> <span class="op">=</span> <span class="ident">ErrorPreconditionFailed</span>(<span class="string">&quot;err&quot;</span>).<span class="ident">into</span>();
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">r</span>.<span class="ident">status</span>(), <span class="ident">StatusCode</span>::<span class="ident">PRECONDITION_FAILED</span>);
<span class="kw">let</span> <span class="ident">r</span>: <span class="ident">HttpResponse</span> <span class="op">=</span> <span class="ident">ErrorExpectationFailed</span>(<span class="string">&quot;err&quot;</span>).<span class="ident">into</span>();
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">r</span>.<span class="ident">status</span>(), <span class="ident">StatusCode</span>::<span class="ident">EXPECTATION_FAILED</span>);
<span class="kw">let</span> <span class="ident">r</span>: <span class="ident">HttpResponse</span> <span class="op">=</span> <span class="ident">ErrorInternalServerError</span>(<span class="string">&quot;err&quot;</span>).<span class="ident">into</span>();
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">r</span>.<span class="ident">status</span>(), <span class="ident">StatusCode</span>::<span class="ident">INTERNAL_SERVER_ERROR</span>);
<span class="kw">let</span> <span class="ident">r</span>: <span class="ident">HttpResponse</span> <span class="op">=</span> <span class="ident">ErrorNotImplemented</span>(<span class="string">&quot;err&quot;</span>).<span class="ident">into</span>();
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">r</span>.<span class="ident">status</span>(), <span class="ident">StatusCode</span>::<span class="ident">NOT_IMPLEMENTED</span>);
<span class="kw">let</span> <span class="ident">r</span>: <span class="ident">HttpResponse</span> <span class="op">=</span> <span class="ident">ErrorBadGateway</span>(<span class="string">&quot;err&quot;</span>).<span class="ident">into</span>();
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">r</span>.<span class="ident">status</span>(), <span class="ident">StatusCode</span>::<span class="ident">BAD_GATEWAY</span>);
<span class="kw">let</span> <span class="ident">r</span>: <span class="ident">HttpResponse</span> <span class="op">=</span> <span class="ident">ErrorServiceUnavailable</span>(<span class="string">&quot;err&quot;</span>).<span class="ident">into</span>();
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">r</span>.<span class="ident">status</span>(), <span class="ident">StatusCode</span>::<span class="ident">SERVICE_UNAVAILABLE</span>);
<span class="kw">let</span> <span class="ident">r</span>: <span class="ident">HttpResponse</span> <span class="op">=</span> <span class="ident">ErrorGatewayTimeout</span>(<span class="string">&quot;err&quot;</span>).<span class="ident">into</span>();
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">r</span>.<span class="ident">status</span>(), <span class="ident">StatusCode</span>::<span class="ident">GATEWAY_TIMEOUT</span>);
}
}
</pre>
</section><section id="search" class="content hidden"></section><section class="footer"></section><aside id="help" class="hidden"><div><h1 class="hidden">Help</h1><div class="shortcuts"><h2>Keyboard Shortcuts</h2><dl><dt><kbd>?</kbd></dt><dd>Show this help dialog</dd><dt><kbd>S</kbd></dt><dd>Focus the search field</dd><dt><kbd></kbd></dt><dd>Move up in search results</dd><dt><kbd></kbd></dt><dd>Move down in search results</dd><dt><kbd></kbd></dt><dd>Switch tab</dd><dt><kbd>&#9166;</kbd></dt><dd>Go to active search result</dd><dt><kbd>+</kbd></dt><dd>Expand all sections</dd><dt><kbd>-</kbd></dt><dd>Collapse all sections</dd></dl></div><div class="infos"><h2>Search Tricks</h2><p>Prefix searches with a type followed by a colon (e.g. <code>fn:</code>) to restrict the search to a given type.</p><p>Accepted types are: <code>fn</code>, <code>mod</code>, <code>struct</code>, <code>enum</code>, <code>trait</code>, <code>type</code>, <code>macro</code>, and <code>const</code>.</p><p>Search functions by type signature (e.g. <code>vec -> usize</code> or <code>* -> vec</code>)</p><p>Search multiple things at once by splitting your query with comma (e.g. <code>str,u8</code> or <code>String,struct:Vec,test</code>)</p></div></div></aside><script>window.rootPath = "../../";window.currentCrate = "actix_web";</script><script src="../../aliases.js"></script><script src="../../main.js"></script><script defer src="../../search-index.js"></script></body></html>