aws-sdk-rust 0.1.42

Important Enhancements: 1) Supports V2 and V4 API Signatures for third party S3 compliant products like Ceph 2) Works from behind proxies 3) Returned data can be in Rust structs, JSON or XML Works only for S3. Other AWS Storage features are coming soon!
<!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/aws/s3/endpoint.rs`.">
    <meta name="keywords" content="rust, rustlang, rust-lang">

    <title>endpoint.rs.html -- source</title>

    <link rel="stylesheet" type="text/css" href="../../../../normalize.css">
    <link rel="stylesheet" type="text/css" href="../../../../rustdoc.css">
    <link rel="stylesheet" type="text/css" href="../../../../main.css">
    

    <link rel="shortcut icon" href="https://lambdastackio.github.io/static/images/favicon.ico">
    
</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">
        <a href='../../../../aws_sdk_rust/index.html'><img src='https://lambdastackio.github.io/static/images/lambdastack-200x200.png' alt='logo' width='100'></a>
        
    </nav>

    <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">
            </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>
</pre><pre class="rust ">
<span class="comment">// Copyright 2017 LambdaStack All rights reserved.</span>
<span class="comment">//</span>
<span class="comment">// Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span>
<span class="comment">// you may not use this file except in compliance with the License.</span>
<span class="comment">// You may obtain a copy of the License at</span>
<span class="comment">//</span>
<span class="comment">// http://www.apache.org/licenses/LICENSE-2.0</span>
<span class="comment">//</span>
<span class="comment">// Unless required by applicable law or agreed to in writing, software</span>
<span class="comment">// distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span>
<span class="comment">// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
<span class="comment">// See the License for the specific language governing permissions and</span>
<span class="comment">// limitations under the License.</span>
<span class="comment">//</span>

<span class="doccomment">//! Client Documentation</span>
<span class="doccomment">//!</span>
<span class="doccomment">//! The crate Url is required and used to build and extract portions of the Url as needed by</span>
<span class="doccomment">//! the library. See the README.md and/or src/main.rs for an example of how to use the library.</span>

<span class="kw">use</span> <span class="ident">url</span>::<span class="ident">Url</span>;
<span class="kw">use</span> <span class="ident">aws</span>::<span class="ident">common</span>::<span class="ident">region</span>::<span class="ident">Region</span>;

<span class="doccomment">/// Endpoint allows you to set a custom endpoint and/or a proxy for a given region and associate this</span>
<span class="doccomment">/// as an endpoint of where S3Client will look for the data.</span>
<span class="doccomment">///</span>
<span class="doccomment">/// NB: Endpoint is *not* JSON encodable/decodable without implementing a custom to_json trait</span>
<span class="doccomment">/// because of third party Url struct.</span>
<span class="doccomment">///</span>
<span class="attribute">#[<span class="ident">allow</span>(<span class="ident">dead_code</span>)]</span>
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Debug</span>, <span class="ident">Clone</span>)]</span>
<span class="kw">pub</span> <span class="kw">struct</span> <span class="ident">Endpoint</span> {
    <span class="doccomment">/// Specify the specific Region you&#39;re targeting the request towards. The default is:</span>
    <span class="doccomment">/// Region::UsEast1. This value should be Region::UsEast1 for third party services since some</span>
    <span class="doccomment">/// do not use Region information for their Endpoint.</span>
    <span class="kw">pub</span> <span class="ident">region</span>: <span class="ident">Region</span>,
    <span class="doccomment">/// Signature is an enum of V2 or V4. Specify Signature::V2 or Signature::V4. See notes below.</span>
    <span class="kw">pub</span> <span class="ident">signature</span>: <span class="ident">Signature</span>,
    <span class="doccomment">/// Uses Url crate. AWS has a fixed set of Endpoints. However, third party services also</span>
    <span class="doccomment">/// need to be covered so adding an option for the Endpoint solves that requirement.</span>
    <span class="doccomment">/// If using AWS then it will default to the given Endpoint for the specified Region.</span>
    <span class="kw">pub</span> <span class="ident">endpoint</span>: <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">Url</span><span class="op">&gt;</span>,
    <span class="doccomment">/// Important: Proxies are used by most Enterprises. You can specify your proxy with the</span>
    <span class="doccomment">/// port in the following format https://&lt;whatever url&gt;:&lt;whatever port&gt;. Also, it honors</span>
    <span class="doccomment">/// the http_proxy, https_proxy and no_proxy environment variables if present. However,</span>
    <span class="doccomment">/// manually setting the value takes precedent.</span>
    <span class="kw">pub</span> <span class="ident">proxy</span>: <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">Url</span><span class="op">&gt;</span>,
    <span class="doccomment">/// `User-Agent`. It lives in `Endpoint` since you may want a different `User-Agent` for</span>
    <span class="doccomment">/// `Endpoint`. This value is an Option&lt;String&gt; which can be None.</span>
    <span class="kw">pub</span> <span class="ident">user_agent</span>: <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">String</span><span class="op">&gt;</span>,
    <span class="doccomment">/// `is_bucket_virtual` defautls to `true` but can be overridden for those cases where the</span>
    <span class="doccomment">/// older style is required. This is useful in situations where you may be testing on one</span>
    <span class="doccomment">/// load balancer and running something like Ceph RGW with virtual buckets enabled but the</span>
    <span class="doccomment">/// new load balancer and VIP range are unable to represent a virtual bucket due to configs</span>
    <span class="doccomment">/// in Ceph RGW DNS.</span>
    <span class="kw">pub</span> <span class="ident">is_bucket_virtual</span>: <span class="ident">bool</span>,
}

<span class="doccomment">/// Required to specify which type of API Signature to use. AWS defaults to using V4 by default.</span>
<span class="doccomment">/// However, third party applications often use V2 (AWS will still honor V2).</span>
<span class="comment">//#[derive(Debug, Clone, Copy)]</span>
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Debug</span>, <span class="ident">Clone</span>, <span class="ident">PartialEq</span>, <span class="ident">RustcDecodable</span>, <span class="ident">RustcEncodable</span>)]</span>
<span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">Signature</span> {
    <span class="ident">V2</span>,
    <span class="ident">V4</span>,
}

<span class="kw">impl</span> <span class="ident">Endpoint</span> {
    <span class="doccomment">/// Endpoint::new accepts Region, Signature, an optional Url and an optional proxy Url:port.</span>
    <span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">new</span>(<span class="ident">region</span>: <span class="ident">Region</span>,
               <span class="ident">signature</span>: <span class="ident">Signature</span>,
               <span class="ident">endpoint</span>: <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">Url</span><span class="op">&gt;</span>,
               <span class="ident">proxy</span>: <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">Url</span><span class="op">&gt;</span>,
               <span class="ident">user_agent</span>: <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">String</span><span class="op">&gt;</span>,
               <span class="ident">is_bucket_virtual</span>: <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">bool</span><span class="op">&gt;</span>) <span class="op">-&gt;</span> <span class="self">Self</span> {
        <span class="ident">Endpoint</span> {
            <span class="ident">region</span>: <span class="ident">region</span>,
            <span class="ident">signature</span>: <span class="ident">signature</span>,
            <span class="ident">endpoint</span>: <span class="ident">default_endpoint</span>(<span class="ident">region</span>, <span class="ident">endpoint</span>),
            <span class="ident">proxy</span>: <span class="ident">proxy</span>,
            <span class="ident">user_agent</span>: <span class="ident">user_agent</span>,
            <span class="ident">is_bucket_virtual</span>: <span class="ident">is_bucket_virtual</span>.<span class="ident">unwrap_or</span>(<span class="bool-val">true</span>),
        }
    }

    <span class="doccomment">/// Extracts out the host portion of the URL as defined by the crate Url.</span>
    <span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">hostname</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="ident">String</span><span class="op">&gt;</span> {
        <span class="kw">match</span> <span class="self">self</span>.<span class="ident">endpoint</span> {
            <span class="prelude-val">None</span> <span class="op">=&gt;</span> <span class="prelude-val">None</span>,
            <span class="prelude-val">Some</span>(<span class="kw-2">ref</span> <span class="ident">url</span>) <span class="op">=&gt;</span> <span class="prelude-val">Some</span>(<span class="ident">url</span>.<span class="ident">host_str</span>().<span class="ident">unwrap</span>().<span class="ident">to_string</span>()),
        }
    }
}

<span class="comment">// This creates the default endpoint to be used on initial create if endpoint is None</span>
<span class="kw">fn</span> <span class="ident">default_endpoint</span>(<span class="ident">region</span>: <span class="ident">Region</span>, <span class="ident">endpoint</span>: <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">Url</span><span class="op">&gt;</span>) <span class="op">-&gt;</span> <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">Url</span><span class="op">&gt;</span> {
    <span class="kw">let</span> <span class="ident">final_endpoint</span>: <span class="ident">Url</span>;
    <span class="kw">match</span> <span class="ident">endpoint</span> {
        <span class="prelude-val">Some</span>(<span class="ident">url</span>) <span class="op">=&gt;</span> <span class="ident">final_endpoint</span> <span class="op">=</span> <span class="ident">url</span>,
        <span class="prelude-val">None</span> <span class="op">=&gt;</span> {
            <span class="comment">// NOTE: Must include the correct scheme (http or https)</span>
            <span class="kw">let</span> <span class="ident">endpoint</span>: <span class="ident">String</span> <span class="op">=</span> <span class="kw">match</span> <span class="ident">region</span> {
                <span class="ident">Region</span>::<span class="ident">UsEast1</span> <span class="op">=&gt;</span> <span class="string">&quot;https://s3.amazonaws.com&quot;</span>.<span class="ident">to_string</span>(),
                <span class="ident">Region</span>::<span class="ident">CnNorth1</span> <span class="op">=&gt;</span> <span class="macro">format</span><span class="macro">!</span>(<span class="string">&quot;https://s3.{}.amazonaws.com.cn&quot;</span>, <span class="ident">region</span>),
                _ <span class="op">=&gt;</span> <span class="macro">format</span><span class="macro">!</span>(<span class="string">&quot;https://s3.amazonaws.com&quot;</span>),
            };
            <span class="ident">final_endpoint</span> <span class="op">=</span> <span class="ident">Url</span>::<span class="ident">parse</span>(<span class="kw-2">&amp;</span><span class="ident">endpoint</span>).<span class="ident">unwrap</span>();
        },
    };

    <span class="prelude-val">Some</span>(<span class="ident">final_endpoint</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>?</dt>
                    <dd>Show this help dialog</dd>
                    <dt>S</dt>
                    <dd>Focus the search field</dd>
                    <dt>&larrb;</dt>
                    <dd>Move up in search results</dd>
                    <dt>&rarrb;</dt>
                    <dd>Move down in search results</dd>
                    <dt>&#9166;</dt>
                    <dd>Go to active search result</dd>
                    <dt>+</dt>
                    <dd>Collapse/expand 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>
            </div>
        </div>
    </aside>

    

    <script>
        window.rootPath = "../../../../";
        window.currentCrate = "aws_sdk_rust";
    </script>
    <script src="../../../../main.js"></script>
    <script defer src="../../../../search-index.js"></script>
</body>
</html>