1
0
mirror of https://github.com/actix/actix-extras.git synced 2025-03-15 09:53:05 +01:00

1625 lines
66 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 of the Rust file `actix-settings/src/lib.rs`."><meta name="keywords" content="rust, rustlang, rust-lang"><title>lib.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceSerif4-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../FiraSans-Regular.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../FiraSans-Medium.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceCodePro-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceSerif4-Bold.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceCodePro-Semibold.ttf.woff2"><link rel="stylesheet" href="../../normalize.css"><link rel="stylesheet" href="../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" href="../../ayu.css" disabled><link rel="stylesheet" href="../../dark.css" disabled><link rel="stylesheet" href="../../light.css" id="themeStyle"><script id="default-settings" ></script><script src="../../storage.js"></script><script defer src="../../source-script.js"></script><script defer src="../../source-files.js"></script><script defer src="../../main.js"></script><noscript><link rel="stylesheet" href="../../noscript.css"></noscript><link rel="icon" href="https://actix.rs/favicon.ico"></head><body class="rustdoc source"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><div class="width-limiter"><nav class="sub"><a class="sub-logo-container" href="../../actix_settings/index.html">
<img src="https://actix.rs/img/logo.png" alt="logo"></a><form class="search-form"><div class="search-container"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../wheel.svg"></a></div></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><pre class="src-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>
</pre><pre class="rust"><code><span class="doccomment">//! Easily manage Actix Web&#39;s settings from a TOML file and environment variables.
//!
//! To get started add a [`Settings::parse_toml(&quot;./Server.toml&quot;)`](Settings::parse_toml) call to the
//! top of your main function. This will create a template file with descriptions of all the
//! configurable settings. You can change or remove anything in that file and it will be picked up
//! the next time you run your application.
//!
//! Overriding parts of the file can be done from values using [`Settings::override_field`] or from
//! the environment using [`Settings::override_field_with_env_var`].
//!
//! # Examples
//!
//! See examples folder on GitHub for complete example.
//!
//! ```ignore
//! # use actix_web::{
//! # get,
//! # middleware::{Compress, Condition, Logger},
//! # web, App, HttpServer,
//! # };
//! use actix_settings::{ApplySettings as _, Mode, Settings};
//!
//! #[actix_web::main]
//! async fn main() -&gt; std::io::Result&lt;()&gt; {
//! let mut settings = Settings::parse_toml(&quot;./Server.toml&quot;)
//! .expect(&quot;Failed to parse `Settings` from Server.toml&quot;);
//!
//! // If the environment variable `$APPLICATION__HOSTS` is set,
//! // have its value override the `settings.actix.hosts` setting:
//! Settings::override_field_with_env_var(&amp;mut settings.actix.hosts, &quot;APPLICATION__HOSTS&quot;)?;
//!
//! init_logger(&amp;settings);
//!
//! HttpServer::new({
//! // clone settings into each worker thread
//! let settings = settings.clone();
//!
//! move || {
//! App::new()
//! // Include this `.wrap()` call for compression settings to take effect
//! .wrap(Condition::new(
//! settings.actix.enable_compression,
//! Compress::default(),
//! ))
//!
//! // add request logger
//! .wrap(Logger::default())
//!
//! // make `Settings` available to handlers
//! .app_data(web::Data::new(settings.clone()))
//!
//! // add request handlers as normal
//! .service(index)
//! }
//! })
//! // apply the `Settings` to Actix Web&#39;s `HttpServer`
//! .apply_settings(&amp;settings)
//! .run()
//! .await
//! }
//! ```
</span><span class="attribute">#![forbid(unsafe_code)]
#![deny(rust_2018_idioms, nonstandard_style)]
#![warn(future_incompatible, missing_docs, missing_debug_implementations)]
#![doc(html_logo_url = <span class="string">&quot;https://actix.rs/img/logo.png&quot;</span>)]
#![doc(html_favicon_url = <span class="string">&quot;https://actix.rs/favicon.ico&quot;</span>)]
</span><span class="kw">use </span>std::{
env, fmt,
fs::File,
io::{Read <span class="kw">as _</span>, Write <span class="kw">as _</span>},
path::Path,
time::Duration,
};
<span class="kw">use </span>actix_http::{Request, Response};
<span class="kw">use </span>actix_service::IntoServiceFactory;
<span class="kw">use </span>actix_web::{
body::MessageBody,
dev::{AppConfig, ServiceFactory},
http::KeepAlive <span class="kw">as </span>ActixKeepAlive,
Error <span class="kw">as </span>WebError, HttpServer,
};
<span class="kw">use </span>serde::{de, Deserialize};
<span class="attribute">#[macro_use]
</span><span class="kw">mod </span>error;
<span class="kw">mod </span>parse;
<span class="kw">mod </span>settings;
<span class="kw">pub use </span><span class="self">self</span>::{
error::Error,
parse::Parse,
settings::{
ActixSettings, Address, Backlog, KeepAlive, MaxConnectionRate, MaxConnections, Mode,
NumWorkers, Timeout, Tls,
},
};
<span class="doccomment">/// Convenience type alias for `Result&lt;T, AtError&gt;`.
</span><span class="kw">type </span>AsResult&lt;T&gt; = std::result::Result&lt;T, Error&gt;;
<span class="doccomment">/// Wrapper for server and application-specific settings.
</span><span class="attribute">#[derive(Debug, Clone, PartialEq, Eq, Hash, Deserialize)]
#[serde(bound = <span class="string">&quot;A: Deserialize&lt;&#39;de&gt;&quot;</span>)]
</span><span class="kw">pub struct </span>BasicSettings&lt;A&gt; {
<span class="doccomment">/// Actix Web server settings.
</span><span class="kw">pub </span>actix: ActixSettings,
<span class="doccomment">/// Application-specific settings.
</span><span class="kw">pub </span>application: A,
}
<span class="doccomment">/// Convenience type alias for [`BasicSettings`] with no defined application-specific settings.
</span><span class="kw">pub type </span>Settings = BasicSettings&lt;NoSettings&gt;;
<span class="doccomment">/// Marker type representing no defined application-specific settings.
</span><span class="attribute">#[derive(Debug, Clone, PartialEq, Eq, Hash, Deserialize)]
#[non_exhaustive]
</span><span class="kw">pub struct </span>NoSettings {<span class="comment">/* NOTE: turning this into a unit struct will cause deserialization failures. */</span>}
<span class="kw">impl</span>&lt;A&gt; BasicSettings&lt;A&gt;
<span class="kw">where
</span>A: de::DeserializeOwned,
{
<span class="comment">// NOTE **DO NOT** mess with the ordering of the tables in the default template.
// Especially the `[application]` table needs to be last in order
// for some tests to keep working.
</span><span class="doccomment">/// Default settings file contents.
</span><span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">const </span>DEFAULT_TOML_TEMPLATE: <span class="kw-2">&amp;</span><span class="lifetime">&#39;static </span>str = <span class="macro">include_str!</span>(<span class="string">&quot;./defaults.toml&quot;</span>);
<span class="doccomment">/// Parse an instance of `Self` from a TOML file located at `filepath`.
///
/// If the file doesn&#39;t exist, it is generated from the default TOML template, after which the
/// newly generated file is read in and parsed.
</span><span class="kw">pub fn </span>parse_toml&lt;P&gt;(filepath: P) -&gt; AsResult&lt;<span class="self">Self</span>&gt;
<span class="kw">where
</span>P: AsRef&lt;Path&gt;,
{
<span class="kw">let </span>filepath = filepath.as_ref();
<span class="kw">if </span>!filepath.exists() {
<span class="self">Self</span>::write_toml_file(filepath)<span class="question-mark">?</span>;
}
<span class="kw">let </span><span class="kw-2">mut </span>f = File::open(filepath)<span class="question-mark">?</span>;
<span class="kw">let </span>len_guess = f.metadata().map(|md| md.len()).unwrap_or(<span class="number">128</span>);
<span class="kw">let </span><span class="kw-2">mut </span>contents = String::with_capacity(len_guess <span class="kw">as </span>usize);
f.read_to_string(<span class="kw-2">&amp;mut </span>contents)<span class="question-mark">?</span>;
<span class="prelude-val">Ok</span>(toml::from_str::&lt;<span class="self">Self</span>&gt;(<span class="kw-2">&amp;</span>contents)<span class="question-mark">?</span>)
}
<span class="doccomment">/// Parse an instance of `Self` straight from the default TOML template.
</span><span class="comment">// TODO: make infallible
// TODO: consider &quot;template&quot; rename
</span><span class="kw">pub fn </span>from_default_template() -&gt; AsResult&lt;<span class="self">Self</span>&gt; {
<span class="self">Self</span>::from_template(<span class="self">Self</span>::DEFAULT_TOML_TEMPLATE)
}
<span class="doccomment">/// Parse an instance of `Self` straight from the default TOML template.
</span><span class="comment">// TODO: consider &quot;template&quot; rename
</span><span class="kw">pub fn </span>from_template(template: <span class="kw-2">&amp;</span>str) -&gt; AsResult&lt;<span class="self">Self</span>&gt; {
<span class="prelude-val">Ok</span>(toml::from_str(template)<span class="question-mark">?</span>)
}
<span class="doccomment">/// Writes the default TOML template to a new file, located at `filepath`.
///
/// # Errors
/// Returns a [`FileExists`](crate::AtError::FileExists) error if a file already exists at that
/// location.
</span><span class="kw">pub fn </span>write_toml_file&lt;P&gt;(filepath: P) -&gt; AsResult&lt;()&gt;
<span class="kw">where
</span>P: AsRef&lt;Path&gt;,
{
<span class="kw">let </span>filepath = filepath.as_ref();
<span class="kw">if </span>filepath.exists() {
<span class="kw">return </span><span class="prelude-val">Err</span>(Error::FileExists(filepath.to_path_buf()));
}
<span class="kw">let </span><span class="kw-2">mut </span>file = File::create(filepath)<span class="question-mark">?</span>;
file.write_all(<span class="self">Self</span>::DEFAULT_TOML_TEMPLATE.trim().as_bytes())<span class="question-mark">?</span>;
file.flush()<span class="question-mark">?</span>;
<span class="prelude-val">Ok</span>(())
}
<span class="doccomment">/// Attempts to parse `value` and override the referenced `field`.
///
/// # Examples
/// ```
/// use actix_settings::{Settings, Mode};
///
/// # fn inner() -&gt; Result&lt;(), actix_settings::Error&gt; {
/// let mut settings = Settings::from_default_template()?;
/// assert_eq!(settings.actix.mode, Mode::Development);
///
/// Settings::override_field(&amp;mut settings.actix.mode, &quot;production&quot;)?;
/// assert_eq!(settings.actix.mode, Mode::Production);
/// # Ok(()) }
/// ```
</span><span class="kw">pub fn </span>override_field&lt;F, V&gt;(field: <span class="kw-2">&amp;mut </span>F, value: V) -&gt; AsResult&lt;()&gt;
<span class="kw">where
</span>F: Parse,
V: AsRef&lt;str&gt;,
{
<span class="kw-2">*</span>field = F::parse(value.as_ref())<span class="question-mark">?</span>;
<span class="prelude-val">Ok</span>(())
}
<span class="doccomment">/// Attempts to read an environment variable, parse it, and override the referenced `field`.
///
/// # Examples
/// ```
/// use actix_settings::{Settings, Mode};
///
/// std::env::set_var(&quot;OVERRIDE__MODE&quot;, &quot;production&quot;);
///
/// # fn inner() -&gt; Result&lt;(), actix_settings::Error&gt; {
/// let mut settings = Settings::from_default_template()?;
/// assert_eq!(settings.actix.mode, Mode::Development);
///
/// Settings::override_field_with_env_var(&amp;mut settings.actix.mode, &quot;OVERRIDE__MODE&quot;)?;
/// assert_eq!(settings.actix.mode, Mode::Production);
/// # Ok(()) }
/// ```
</span><span class="kw">pub fn </span>override_field_with_env_var&lt;F, N&gt;(field: <span class="kw-2">&amp;mut </span>F, var_name: N) -&gt; AsResult&lt;()&gt;
<span class="kw">where
</span>F: Parse,
N: AsRef&lt;str&gt;,
{
<span class="kw">match </span>env::var(var_name.as_ref()) {
<span class="prelude-val">Err</span>(env::VarError::NotPresent) =&gt; <span class="prelude-val">Ok</span>((<span class="comment">/*NOP*/</span>)),
<span class="prelude-val">Err</span>(var_error) =&gt; <span class="prelude-val">Err</span>(Error::from(var_error)),
<span class="prelude-val">Ok</span>(value) =&gt; <span class="self">Self</span>::override_field(field, value),
}
}
}
<span class="doccomment">/// Extension trait for applying parsed settings to the server object.
</span><span class="kw">pub trait </span>ApplySettings {
<span class="doccomment">/// Apply a [`BasicSettings`] value to `self`.
///
/// [`BasicSettings`]: ./struct.BasicSettings.html
</span><span class="attribute">#[must_use]
</span><span class="kw">fn </span>apply_settings&lt;A&gt;(<span class="self">self</span>, settings: <span class="kw-2">&amp;</span>BasicSettings&lt;A&gt;) -&gt; <span class="self">Self
</span><span class="kw">where
</span>A: de::DeserializeOwned;
}
<span class="kw">impl</span>&lt;F, I, S, B&gt; ApplySettings <span class="kw">for </span>HttpServer&lt;F, I, S, B&gt;
<span class="kw">where
</span>F: Fn() -&gt; I + Send + Clone + <span class="lifetime">&#39;static</span>,
I: IntoServiceFactory&lt;S, Request&gt;,
S: ServiceFactory&lt;Request, Config = AppConfig&gt; + <span class="lifetime">&#39;static</span>,
S::Error: Into&lt;WebError&gt; + <span class="lifetime">&#39;static</span>,
S::InitError: fmt::Debug,
S::Response: Into&lt;Response&lt;B&gt;&gt; + <span class="lifetime">&#39;static</span>,
S::Future: <span class="lifetime">&#39;static</span>,
B: MessageBody + <span class="lifetime">&#39;static</span>,
{
<span class="kw">fn </span>apply_settings&lt;A&gt;(<span class="kw-2">mut </span><span class="self">self</span>, settings: <span class="kw-2">&amp;</span>BasicSettings&lt;A&gt;) -&gt; <span class="self">Self
</span><span class="kw">where
</span>A: de::DeserializeOwned,
{
<span class="kw">if </span>settings.actix.tls.enabled {
<span class="comment">// for Address { host, port } in &amp;settings.actix.hosts {
// self = self.bind(format!(&quot;{}:{}&quot;, host, port))
// .unwrap(/*TODO*/);
// }
</span><span class="macro">todo!</span>(<span class="string">&quot;[ApplySettings] TLS support has not been implemented yet.&quot;</span>);
} <span class="kw">else </span>{
<span class="kw">for </span>Address { host, port } <span class="kw">in </span><span class="kw-2">&amp;</span>settings.actix.hosts {
<span class="self">self </span>= <span class="self">self</span>.bind(<span class="macro">format!</span>(<span class="string">&quot;{}:{}&quot;</span>, host, port))
.unwrap(<span class="comment">/*TODO*/</span>);
}
}
<span class="self">self </span>= <span class="kw">match </span>settings.actix.num_workers {
NumWorkers::Default =&gt; <span class="self">self</span>,
NumWorkers::Manual(n) =&gt; <span class="self">self</span>.workers(n),
};
<span class="self">self </span>= <span class="kw">match </span>settings.actix.backlog {
Backlog::Default =&gt; <span class="self">self</span>,
Backlog::Manual(n) =&gt; <span class="self">self</span>.backlog(n <span class="kw">as </span>u32),
};
<span class="self">self </span>= <span class="kw">match </span>settings.actix.max_connections {
MaxConnections::Default =&gt; <span class="self">self</span>,
MaxConnections::Manual(n) =&gt; <span class="self">self</span>.max_connections(n),
};
<span class="self">self </span>= <span class="kw">match </span>settings.actix.max_connection_rate {
MaxConnectionRate::Default =&gt; <span class="self">self</span>,
MaxConnectionRate::Manual(n) =&gt; <span class="self">self</span>.max_connection_rate(n),
};
<span class="self">self </span>= <span class="kw">match </span>settings.actix.keep_alive {
KeepAlive::Default =&gt; <span class="self">self</span>,
KeepAlive::Disabled =&gt; <span class="self">self</span>.keep_alive(ActixKeepAlive::Disabled),
KeepAlive::Os =&gt; <span class="self">self</span>.keep_alive(ActixKeepAlive::Os),
KeepAlive::Seconds(n) =&gt; <span class="self">self</span>.keep_alive(Duration::from_secs(n <span class="kw">as </span>u64)),
};
<span class="self">self </span>= <span class="kw">match </span>settings.actix.client_timeout {
Timeout::Default =&gt; <span class="self">self</span>,
Timeout::Milliseconds(n) =&gt; {
<span class="self">self</span>.client_request_timeout(Duration::from_millis(n <span class="kw">as </span>u64))
}
Timeout::Seconds(n) =&gt; <span class="self">self</span>.client_request_timeout(Duration::from_secs(n <span class="kw">as </span>u64)),
};
<span class="self">self </span>= <span class="kw">match </span>settings.actix.client_shutdown {
Timeout::Default =&gt; <span class="self">self</span>,
Timeout::Milliseconds(n) =&gt; {
<span class="self">self</span>.client_disconnect_timeout(Duration::from_millis(n <span class="kw">as </span>u64))
}
Timeout::Seconds(n) =&gt; <span class="self">self</span>.client_disconnect_timeout(Duration::from_secs(n <span class="kw">as </span>u64)),
};
<span class="self">self </span>= <span class="kw">match </span>settings.actix.shutdown_timeout {
Timeout::Default =&gt; <span class="self">self</span>,
Timeout::Milliseconds(<span class="kw">_</span>) =&gt; <span class="self">self</span>.shutdown_timeout(<span class="number">1</span>),
Timeout::Seconds(n) =&gt; <span class="self">self</span>.shutdown_timeout(n <span class="kw">as </span>u64),
};
<span class="self">self
</span>}
}
<span class="attribute">#[cfg(test)]
</span><span class="kw">mod </span>tests {
<span class="kw">use </span>actix_web::App;
<span class="kw">use super</span>::<span class="kw-2">*</span>;
<span class="attribute">#[test]
</span><span class="kw">fn </span>apply_settings() {
<span class="kw">let </span>settings = Settings::parse_toml(<span class="string">&quot;Server.toml&quot;</span>).unwrap();
<span class="kw">let _ </span>= HttpServer::new(App::new).apply_settings(<span class="kw-2">&amp;</span>settings);
}
<span class="attribute">#[test]
</span><span class="kw">fn </span>override_field_hosts() {
<span class="kw">let </span><span class="kw-2">mut </span>settings = Settings::from_default_template().unwrap();
<span class="macro">assert_eq!</span>(
settings.actix.hosts,
<span class="macro">vec!</span>[Address {
host: <span class="string">&quot;0.0.0.0&quot;</span>.into(),
port: <span class="number">9000
</span>},]
);
Settings::override_field(
<span class="kw-2">&amp;mut </span>settings.actix.hosts,
<span class="string">r#&quot;[
[&quot;0.0.0.0&quot;, 1234],
[&quot;localhost&quot;, 2345]
]&quot;#</span>,
)
.unwrap();
<span class="macro">assert_eq!</span>(
settings.actix.hosts,
<span class="macro">vec!</span>[
Address {
host: <span class="string">&quot;0.0.0.0&quot;</span>.into(),
port: <span class="number">1234
</span>},
Address {
host: <span class="string">&quot;localhost&quot;</span>.into(),
port: <span class="number">2345
</span>},
]
);
}
<span class="attribute">#[test]
</span><span class="kw">fn </span>override_field_with_env_var_hosts() {
<span class="kw">let </span><span class="kw-2">mut </span>settings = Settings::from_default_template().unwrap();
<span class="macro">assert_eq!</span>(
settings.actix.hosts,
<span class="macro">vec!</span>[Address {
host: <span class="string">&quot;0.0.0.0&quot;</span>.into(),
port: <span class="number">9000
</span>},]
);
std::env::set_var(
<span class="string">&quot;OVERRIDE__HOSTS&quot;</span>,
<span class="string">r#&quot;[
[&quot;0.0.0.0&quot;, 1234],
[&quot;localhost&quot;, 2345]
]&quot;#</span>,
);
Settings::override_field_with_env_var(<span class="kw-2">&amp;mut </span>settings.actix.hosts, <span class="string">&quot;OVERRIDE__HOSTS&quot;</span>)
.unwrap();
<span class="macro">assert_eq!</span>(
settings.actix.hosts,
<span class="macro">vec!</span>[
Address {
host: <span class="string">&quot;0.0.0.0&quot;</span>.into(),
port: <span class="number">1234
</span>},
Address {
host: <span class="string">&quot;localhost&quot;</span>.into(),
port: <span class="number">2345
</span>},
]
);
}
<span class="attribute">#[test]
</span><span class="kw">fn </span>override_field_mode() {
<span class="kw">let </span><span class="kw-2">mut </span>settings = Settings::from_default_template().unwrap();
<span class="macro">assert_eq!</span>(settings.actix.mode, Mode::Development);
Settings::override_field(<span class="kw-2">&amp;mut </span>settings.actix.mode, <span class="string">&quot;production&quot;</span>).unwrap();
<span class="macro">assert_eq!</span>(settings.actix.mode, Mode::Production);
}
<span class="attribute">#[test]
</span><span class="kw">fn </span>override_field_with_env_var_mode() {
<span class="kw">let </span><span class="kw-2">mut </span>settings = Settings::from_default_template().unwrap();
<span class="macro">assert_eq!</span>(settings.actix.mode, Mode::Development);
std::env::set_var(<span class="string">&quot;OVERRIDE__MODE&quot;</span>, <span class="string">&quot;production&quot;</span>);
Settings::override_field_with_env_var(<span class="kw-2">&amp;mut </span>settings.actix.mode, <span class="string">&quot;OVERRIDE__MODE&quot;</span>).unwrap();
<span class="macro">assert_eq!</span>(settings.actix.mode, Mode::Production);
}
<span class="attribute">#[test]
</span><span class="kw">fn </span>override_field_enable_compression() {
<span class="kw">let </span><span class="kw-2">mut </span>settings = Settings::from_default_template().unwrap();
<span class="macro">assert!</span>(settings.actix.enable_compression);
Settings::override_field(<span class="kw-2">&amp;mut </span>settings.actix.enable_compression, <span class="string">&quot;false&quot;</span>).unwrap();
<span class="macro">assert!</span>(!settings.actix.enable_compression);
}
<span class="attribute">#[test]
</span><span class="kw">fn </span>override_field_with_env_var_enable_compression() {
<span class="kw">let </span><span class="kw-2">mut </span>settings = Settings::from_default_template().unwrap();
<span class="macro">assert!</span>(settings.actix.enable_compression);
std::env::set_var(<span class="string">&quot;OVERRIDE__ENABLE_COMPRESSION&quot;</span>, <span class="string">&quot;false&quot;</span>);
Settings::override_field_with_env_var(
<span class="kw-2">&amp;mut </span>settings.actix.enable_compression,
<span class="string">&quot;OVERRIDE__ENABLE_COMPRESSION&quot;</span>,
)
.unwrap();
<span class="macro">assert!</span>(!settings.actix.enable_compression);
}
<span class="attribute">#[test]
</span><span class="kw">fn </span>override_field_enable_log() {
<span class="kw">let </span><span class="kw-2">mut </span>settings = Settings::from_default_template().unwrap();
<span class="macro">assert!</span>(settings.actix.enable_log);
Settings::override_field(<span class="kw-2">&amp;mut </span>settings.actix.enable_log, <span class="string">&quot;false&quot;</span>).unwrap();
<span class="macro">assert!</span>(!settings.actix.enable_log);
}
<span class="attribute">#[test]
</span><span class="kw">fn </span>override_field_with_env_var_enable_log() {
<span class="kw">let </span><span class="kw-2">mut </span>settings = Settings::from_default_template().unwrap();
<span class="macro">assert!</span>(settings.actix.enable_log);
std::env::set_var(<span class="string">&quot;OVERRIDE__ENABLE_LOG&quot;</span>, <span class="string">&quot;false&quot;</span>);
Settings::override_field_with_env_var(
<span class="kw-2">&amp;mut </span>settings.actix.enable_log,
<span class="string">&quot;OVERRIDE__ENABLE_LOG&quot;</span>,
)
.unwrap();
<span class="macro">assert!</span>(!settings.actix.enable_log);
}
<span class="attribute">#[test]
</span><span class="kw">fn </span>override_field_num_workers() {
<span class="kw">let </span><span class="kw-2">mut </span>settings = Settings::from_default_template().unwrap();
<span class="macro">assert_eq!</span>(settings.actix.num_workers, NumWorkers::Default);
Settings::override_field(<span class="kw-2">&amp;mut </span>settings.actix.num_workers, <span class="string">&quot;42&quot;</span>).unwrap();
<span class="macro">assert_eq!</span>(settings.actix.num_workers, NumWorkers::Manual(<span class="number">42</span>));
}
<span class="attribute">#[test]
</span><span class="kw">fn </span>override_field_with_env_var_num_workers() {
<span class="kw">let </span><span class="kw-2">mut </span>settings = Settings::from_default_template().unwrap();
<span class="macro">assert_eq!</span>(settings.actix.num_workers, NumWorkers::Default);
std::env::set_var(<span class="string">&quot;OVERRIDE__NUM_WORKERS&quot;</span>, <span class="string">&quot;42&quot;</span>);
Settings::override_field_with_env_var(
<span class="kw-2">&amp;mut </span>settings.actix.num_workers,
<span class="string">&quot;OVERRIDE__NUM_WORKERS&quot;</span>,
)
.unwrap();
<span class="macro">assert_eq!</span>(settings.actix.num_workers, NumWorkers::Manual(<span class="number">42</span>));
}
<span class="attribute">#[test]
</span><span class="kw">fn </span>override_field_backlog() {
<span class="kw">let </span><span class="kw-2">mut </span>settings = Settings::from_default_template().unwrap();
<span class="macro">assert_eq!</span>(settings.actix.backlog, Backlog::Default);
Settings::override_field(<span class="kw-2">&amp;mut </span>settings.actix.backlog, <span class="string">&quot;42&quot;</span>).unwrap();
<span class="macro">assert_eq!</span>(settings.actix.backlog, Backlog::Manual(<span class="number">42</span>));
}
<span class="attribute">#[test]
</span><span class="kw">fn </span>override_field_with_env_var_backlog() {
<span class="kw">let </span><span class="kw-2">mut </span>settings = Settings::from_default_template().unwrap();
<span class="macro">assert_eq!</span>(settings.actix.backlog, Backlog::Default);
std::env::set_var(<span class="string">&quot;OVERRIDE__BACKLOG&quot;</span>, <span class="string">&quot;42&quot;</span>);
Settings::override_field_with_env_var(<span class="kw-2">&amp;mut </span>settings.actix.backlog, <span class="string">&quot;OVERRIDE__BACKLOG&quot;</span>)
.unwrap();
<span class="macro">assert_eq!</span>(settings.actix.backlog, Backlog::Manual(<span class="number">42</span>));
}
<span class="attribute">#[test]
</span><span class="kw">fn </span>override_field_max_connections() {
<span class="kw">let </span><span class="kw-2">mut </span>settings = Settings::from_default_template().unwrap();
<span class="macro">assert_eq!</span>(settings.actix.max_connections, MaxConnections::Default);
Settings::override_field(<span class="kw-2">&amp;mut </span>settings.actix.max_connections, <span class="string">&quot;42&quot;</span>).unwrap();
<span class="macro">assert_eq!</span>(settings.actix.max_connections, MaxConnections::Manual(<span class="number">42</span>));
}
<span class="attribute">#[test]
</span><span class="kw">fn </span>override_field_with_env_var_max_connections() {
<span class="kw">let </span><span class="kw-2">mut </span>settings = Settings::from_default_template().unwrap();
<span class="macro">assert_eq!</span>(settings.actix.max_connections, MaxConnections::Default);
std::env::set_var(<span class="string">&quot;OVERRIDE__MAX_CONNECTIONS&quot;</span>, <span class="string">&quot;42&quot;</span>);
Settings::override_field_with_env_var(
<span class="kw-2">&amp;mut </span>settings.actix.max_connections,
<span class="string">&quot;OVERRIDE__MAX_CONNECTIONS&quot;</span>,
)
.unwrap();
<span class="macro">assert_eq!</span>(settings.actix.max_connections, MaxConnections::Manual(<span class="number">42</span>));
}
<span class="attribute">#[test]
</span><span class="kw">fn </span>override_field_max_connection_rate() {
<span class="kw">let </span><span class="kw-2">mut </span>settings = Settings::from_default_template().unwrap();
<span class="macro">assert_eq!</span>(
settings.actix.max_connection_rate,
MaxConnectionRate::Default
);
Settings::override_field(<span class="kw-2">&amp;mut </span>settings.actix.max_connection_rate, <span class="string">&quot;42&quot;</span>).unwrap();
<span class="macro">assert_eq!</span>(
settings.actix.max_connection_rate,
MaxConnectionRate::Manual(<span class="number">42</span>)
);
}
<span class="attribute">#[test]
</span><span class="kw">fn </span>override_field_with_env_var_max_connection_rate() {
<span class="kw">let </span><span class="kw-2">mut </span>settings = Settings::from_default_template().unwrap();
<span class="macro">assert_eq!</span>(
settings.actix.max_connection_rate,
MaxConnectionRate::Default
);
std::env::set_var(<span class="string">&quot;OVERRIDE__MAX_CONNECTION_RATE&quot;</span>, <span class="string">&quot;42&quot;</span>);
Settings::override_field_with_env_var(
<span class="kw-2">&amp;mut </span>settings.actix.max_connection_rate,
<span class="string">&quot;OVERRIDE__MAX_CONNECTION_RATE&quot;</span>,
)
.unwrap();
<span class="macro">assert_eq!</span>(
settings.actix.max_connection_rate,
MaxConnectionRate::Manual(<span class="number">42</span>)
);
}
<span class="attribute">#[test]
</span><span class="kw">fn </span>override_field_keep_alive() {
<span class="kw">let </span><span class="kw-2">mut </span>settings = Settings::from_default_template().unwrap();
<span class="macro">assert_eq!</span>(settings.actix.keep_alive, KeepAlive::Default);
Settings::override_field(<span class="kw-2">&amp;mut </span>settings.actix.keep_alive, <span class="string">&quot;42 seconds&quot;</span>).unwrap();
<span class="macro">assert_eq!</span>(settings.actix.keep_alive, KeepAlive::Seconds(<span class="number">42</span>));
}
<span class="attribute">#[test]
</span><span class="kw">fn </span>override_field_with_env_var_keep_alive() {
<span class="kw">let </span><span class="kw-2">mut </span>settings = Settings::from_default_template().unwrap();
<span class="macro">assert_eq!</span>(settings.actix.keep_alive, KeepAlive::Default);
std::env::set_var(<span class="string">&quot;OVERRIDE__KEEP_ALIVE&quot;</span>, <span class="string">&quot;42 seconds&quot;</span>);
Settings::override_field_with_env_var(
<span class="kw-2">&amp;mut </span>settings.actix.keep_alive,
<span class="string">&quot;OVERRIDE__KEEP_ALIVE&quot;</span>,
)
.unwrap();
<span class="macro">assert_eq!</span>(settings.actix.keep_alive, KeepAlive::Seconds(<span class="number">42</span>));
}
<span class="attribute">#[test]
</span><span class="kw">fn </span>override_field_client_timeout() {
<span class="kw">let </span><span class="kw-2">mut </span>settings = Settings::from_default_template().unwrap();
<span class="macro">assert_eq!</span>(settings.actix.client_timeout, Timeout::Default);
Settings::override_field(<span class="kw-2">&amp;mut </span>settings.actix.client_timeout, <span class="string">&quot;42 seconds&quot;</span>).unwrap();
<span class="macro">assert_eq!</span>(settings.actix.client_timeout, Timeout::Seconds(<span class="number">42</span>));
}
<span class="attribute">#[test]
</span><span class="kw">fn </span>override_field_with_env_var_client_timeout() {
<span class="kw">let </span><span class="kw-2">mut </span>settings = Settings::from_default_template().unwrap();
<span class="macro">assert_eq!</span>(settings.actix.client_timeout, Timeout::Default);
std::env::set_var(<span class="string">&quot;OVERRIDE__CLIENT_TIMEOUT&quot;</span>, <span class="string">&quot;42 seconds&quot;</span>);
Settings::override_field_with_env_var(
<span class="kw-2">&amp;mut </span>settings.actix.client_timeout,
<span class="string">&quot;OVERRIDE__CLIENT_TIMEOUT&quot;</span>,
)
.unwrap();
<span class="macro">assert_eq!</span>(settings.actix.client_timeout, Timeout::Seconds(<span class="number">42</span>));
}
<span class="attribute">#[test]
</span><span class="kw">fn </span>override_field_client_shutdown() {
<span class="kw">let </span><span class="kw-2">mut </span>settings = Settings::from_default_template().unwrap();
<span class="macro">assert_eq!</span>(settings.actix.client_shutdown, Timeout::Default);
Settings::override_field(<span class="kw-2">&amp;mut </span>settings.actix.client_shutdown, <span class="string">&quot;42 seconds&quot;</span>).unwrap();
<span class="macro">assert_eq!</span>(settings.actix.client_shutdown, Timeout::Seconds(<span class="number">42</span>));
}
<span class="attribute">#[test]
</span><span class="kw">fn </span>override_field_with_env_var_client_shutdown() {
<span class="kw">let </span><span class="kw-2">mut </span>settings = Settings::from_default_template().unwrap();
<span class="macro">assert_eq!</span>(settings.actix.client_shutdown, Timeout::Default);
std::env::set_var(<span class="string">&quot;OVERRIDE__CLIENT_SHUTDOWN&quot;</span>, <span class="string">&quot;42 seconds&quot;</span>);
Settings::override_field_with_env_var(
<span class="kw-2">&amp;mut </span>settings.actix.client_shutdown,
<span class="string">&quot;OVERRIDE__CLIENT_SHUTDOWN&quot;</span>,
)
.unwrap();
<span class="macro">assert_eq!</span>(settings.actix.client_shutdown, Timeout::Seconds(<span class="number">42</span>));
}
<span class="attribute">#[test]
</span><span class="kw">fn </span>override_field_shutdown_timeout() {
<span class="kw">let </span><span class="kw-2">mut </span>settings = Settings::from_default_template().unwrap();
<span class="macro">assert_eq!</span>(settings.actix.shutdown_timeout, Timeout::Default);
Settings::override_field(<span class="kw-2">&amp;mut </span>settings.actix.shutdown_timeout, <span class="string">&quot;42 seconds&quot;</span>).unwrap();
<span class="macro">assert_eq!</span>(settings.actix.shutdown_timeout, Timeout::Seconds(<span class="number">42</span>));
}
<span class="attribute">#[test]
</span><span class="kw">fn </span>override_field_with_env_var_shutdown_timeout() {
<span class="kw">let </span><span class="kw-2">mut </span>settings = Settings::from_default_template().unwrap();
<span class="macro">assert_eq!</span>(settings.actix.shutdown_timeout, Timeout::Default);
std::env::set_var(<span class="string">&quot;OVERRIDE__SHUTDOWN_TIMEOUT&quot;</span>, <span class="string">&quot;42 seconds&quot;</span>);
Settings::override_field_with_env_var(
<span class="kw-2">&amp;mut </span>settings.actix.shutdown_timeout,
<span class="string">&quot;OVERRIDE__SHUTDOWN_TIMEOUT&quot;</span>,
)
.unwrap();
<span class="macro">assert_eq!</span>(settings.actix.shutdown_timeout, Timeout::Seconds(<span class="number">42</span>));
}
<span class="attribute">#[test]
</span><span class="kw">fn </span>override_field_tls_enabled() {
<span class="kw">let </span><span class="kw-2">mut </span>settings = Settings::from_default_template().unwrap();
<span class="macro">assert!</span>(!settings.actix.tls.enabled);
Settings::override_field(<span class="kw-2">&amp;mut </span>settings.actix.tls.enabled, <span class="string">&quot;true&quot;</span>).unwrap();
<span class="macro">assert!</span>(settings.actix.tls.enabled);
}
<span class="attribute">#[test]
</span><span class="kw">fn </span>override_field_with_env_var_tls_enabled() {
<span class="kw">let </span><span class="kw-2">mut </span>settings = Settings::from_default_template().unwrap();
<span class="macro">assert!</span>(!settings.actix.tls.enabled);
std::env::set_var(<span class="string">&quot;OVERRIDE__TLS_ENABLED&quot;</span>, <span class="string">&quot;true&quot;</span>);
Settings::override_field_with_env_var(
<span class="kw-2">&amp;mut </span>settings.actix.tls.enabled,
<span class="string">&quot;OVERRIDE__TLS_ENABLED&quot;</span>,
)
.unwrap();
<span class="macro">assert!</span>(settings.actix.tls.enabled);
}
<span class="attribute">#[test]
</span><span class="kw">fn </span>override_field_tls_certificate() {
<span class="kw">let </span><span class="kw-2">mut </span>settings = Settings::from_default_template().unwrap();
<span class="macro">assert_eq!</span>(
settings.actix.tls.certificate,
Path::new(<span class="string">&quot;path/to/cert/cert.pem&quot;</span>)
);
Settings::override_field(
<span class="kw-2">&amp;mut </span>settings.actix.tls.certificate,
<span class="string">&quot;/overridden/path/to/cert/cert.pem&quot;</span>,
)
.unwrap();
<span class="macro">assert_eq!</span>(
settings.actix.tls.certificate,
Path::new(<span class="string">&quot;/overridden/path/to/cert/cert.pem&quot;</span>)
);
}
<span class="attribute">#[test]
</span><span class="kw">fn </span>override_field_with_env_var_tls_certificate() {
<span class="kw">let </span><span class="kw-2">mut </span>settings = Settings::from_default_template().unwrap();
<span class="macro">assert_eq!</span>(
settings.actix.tls.certificate,
Path::new(<span class="string">&quot;path/to/cert/cert.pem&quot;</span>)
);
std::env::set_var(
<span class="string">&quot;OVERRIDE__TLS_CERTIFICATE&quot;</span>,
<span class="string">&quot;/overridden/path/to/cert/cert.pem&quot;</span>,
);
Settings::override_field_with_env_var(
<span class="kw-2">&amp;mut </span>settings.actix.tls.certificate,
<span class="string">&quot;OVERRIDE__TLS_CERTIFICATE&quot;</span>,
)
.unwrap();
<span class="macro">assert_eq!</span>(
settings.actix.tls.certificate,
Path::new(<span class="string">&quot;/overridden/path/to/cert/cert.pem&quot;</span>)
);
}
<span class="attribute">#[test]
</span><span class="kw">fn </span>override_field_tls_private_key() {
<span class="kw">let </span><span class="kw-2">mut </span>settings = Settings::from_default_template().unwrap();
<span class="macro">assert_eq!</span>(
settings.actix.tls.private_key,
Path::new(<span class="string">&quot;path/to/cert/key.pem&quot;</span>)
);
Settings::override_field(
<span class="kw-2">&amp;mut </span>settings.actix.tls.private_key,
<span class="string">&quot;/overridden/path/to/cert/key.pem&quot;</span>,
)
.unwrap();
<span class="macro">assert_eq!</span>(
settings.actix.tls.private_key,
Path::new(<span class="string">&quot;/overridden/path/to/cert/key.pem&quot;</span>)
);
}
<span class="attribute">#[test]
</span><span class="kw">fn </span>override_field_with_env_var_tls_private_key() {
<span class="kw">let </span><span class="kw-2">mut </span>settings = Settings::from_default_template().unwrap();
<span class="macro">assert_eq!</span>(
settings.actix.tls.private_key,
Path::new(<span class="string">&quot;path/to/cert/key.pem&quot;</span>)
);
std::env::set_var(
<span class="string">&quot;OVERRIDE__TLS_PRIVATE_KEY&quot;</span>,
<span class="string">&quot;/overridden/path/to/cert/key.pem&quot;</span>,
);
Settings::override_field_with_env_var(
<span class="kw-2">&amp;mut </span>settings.actix.tls.private_key,
<span class="string">&quot;OVERRIDE__TLS_PRIVATE_KEY&quot;</span>,
)
.unwrap();
<span class="macro">assert_eq!</span>(
settings.actix.tls.private_key,
Path::new(<span class="string">&quot;/overridden/path/to/cert/key.pem&quot;</span>)
);
}
<span class="attribute">#[test]
</span><span class="kw">fn </span>override_extended_field_with_custom_type() {
<span class="attribute">#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
</span><span class="kw">struct </span>NestedSetting {
foo: String,
bar: bool,
}
<span class="attribute">#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
#[serde(rename_all = <span class="string">&quot;kebab-case&quot;</span>)]
</span><span class="kw">struct </span>AppSettings {
example_name: String,
nested_field: NestedSetting,
}
<span class="kw">type </span>CustomSettings = BasicSettings&lt;AppSettings&gt;;
<span class="kw">let </span><span class="kw-2">mut </span>settings = CustomSettings::from_template(
<span class="kw-2">&amp;</span>(CustomSettings::DEFAULT_TOML_TEMPLATE.to_string()
<span class="comment">// NOTE: Add these entries to the `[application]` table:
</span>+ <span class="string">&quot;\nexample-name = \&quot;example value\&quot;&quot;
</span>+ <span class="string">&quot;\nnested-field = { foo = \&quot;foo\&quot;, bar = false }&quot;</span>),
)
.unwrap();
<span class="macro">assert_eq!</span>(
settings.application,
AppSettings {
example_name: <span class="string">&quot;example value&quot;</span>.into(),
nested_field: NestedSetting {
foo: <span class="string">&quot;foo&quot;</span>.into(),
bar: <span class="bool-val">false</span>,
},
}
);
CustomSettings::override_field(
<span class="kw-2">&amp;mut </span>settings.application.example_name,
<span class="string">&quot;/overridden/path/to/cert/key.pem&quot;</span>,
)
.unwrap();
<span class="macro">assert_eq!</span>(
settings.application,
AppSettings {
example_name: <span class="string">&quot;/overridden/path/to/cert/key.pem&quot;</span>.into(),
nested_field: NestedSetting {
foo: <span class="string">&quot;foo&quot;</span>.into(),
bar: <span class="bool-val">false</span>,
},
}
);
}
}
</code></pre></div>
</section></div></main><div id="rustdoc-vars" data-root-path="../../" data-current-crate="actix_settings" data-themes="ayu,dark,light" data-resource-suffix="" data-rustdoc-version="1.66.0-nightly (0da281b60 2022-10-27)" ></div></body></html>