From c2c7fb0b550e2f402506737a1aea2db979b9d989 Mon Sep 17 00:00:00 2001 From: Dumindu Madunuwan Date: Sat, 11 Nov 2023 21:15:42 +0800 Subject: [PATCH 01/24] =?UTF-8?q?=F0=9F=9A=80=20Upload=20Site?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...842dd1330bdc793b12b633d5413d263a72db4a.css | 1 + ...236da2de84cec9a20c5cf6973f9887f4ff79d1.css | 1 + ...587f2aae17affcb8375298ad2180851930cb142.js | 1 + ...91ab4d778359264b06feb44401e3a1a40062184.js | 1 + docs/categories/index.xml | 11 + docs/docs/borrowing/index.html | 716 ++++++++++++ .../index.html | 589 ++++++++++ docs/docs/code-organization/index.html | 647 +++++++++++ docs/docs/combinators/index.html | 1004 +++++++++++++++++ .../index.html | 570 ++++++++++ docs/docs/control-flows/index.html | 756 +++++++++++++ docs/docs/crates/index.html | 886 +++++++++++++++ docs/docs/custom-error-types/index.html | 979 ++++++++++++++++ docs/docs/enums/index.html | 609 ++++++++++ .../error-and-none-propagation/index.html | 794 +++++++++++++ docs/docs/functions-02/index.html | 649 +++++++++++ docs/docs/functions/index.html | 613 ++++++++++ docs/docs/generics/index.html | 689 +++++++++++ docs/docs/hello-world/index.html | 540 +++++++++ docs/docs/impls-and-traits/index.html | 741 ++++++++++++ docs/docs/index.html | 10 + docs/docs/index.xml | 299 +++++ docs/docs/installation/index.html | 516 +++++++++ docs/docs/learning_rust_medium.png | Bin 0 -> 289415 bytes docs/docs/lifetimes/index.html | 833 ++++++++++++++ docs/docs/modules/index.html | 827 ++++++++++++++ docs/docs/operators/index.html | 655 +++++++++++ docs/docs/option-and-result/index.html | 801 +++++++++++++ docs/docs/overview/index.html | 462 ++++++++ docs/docs/ownership/index.html | 632 +++++++++++ docs/docs/panicking/index.html | 866 ++++++++++++++ docs/docs/primitive-data-types/index.html | 791 +++++++++++++ docs/docs/rust_playground.png | Bin 0 -> 27723 bytes docs/docs/smart-compiler/index.html | 757 +++++++++++++ .../std-primitives-and-preludes/index.html | 791 +++++++++++++ docs/docs/structs/index.html | 660 +++++++++++ docs/docs/unwrap-and-expect/index.html | 880 +++++++++++++++ docs/docs/use/index.html | 761 +++++++++++++ .../index.html | 581 ++++++++++ docs/docs/vectors/index.html | 614 ++++++++++ docs/docs/why-rust/index.html | 514 +++++++++ docs/docs/workspaces/index.html | 701 ++++++++++++ docs/favicon/android-chrome-192x192.png | Bin 0 -> 31612 bytes docs/favicon/android-chrome-512x512.png | Bin 0 -> 154886 bytes docs/favicon/apple-touch-icon.png | Bin 0 -> 28312 bytes docs/favicon/favicon-16x16.png | Bin 0 -> 718 bytes docs/favicon/favicon-32x32.png | Bin 0 -> 1718 bytes docs/favicon/favicon.ico | Bin 0 -> 15406 bytes docs/index.html | 66 ++ docs/index.xml | 299 +++++ docs/manifest.json | 21 + docs/sitemap.xml | 114 ++ docs/sw.js | 55 + docs/tags/index.xml | 11 + 54 files changed, 24314 insertions(+) create mode 100644 docs/assets/css/docs.min.min.9deba2d55bb7534667e8b6e4ac842dd1330bdc793b12b633d5413d263a72db4a.css create mode 100644 docs/assets/css/home.min.min.c5c3b8755137be47315c6aa021236da2de84cec9a20c5cf6973f9887f4ff79d1.css create mode 100644 docs/assets/js/docs.min.min.12ffdc25c0149ef34e761ee54587f2aae17affcb8375298ad2180851930cb142.js create mode 100644 docs/assets/js/home.min.min.c8547379013b8a9d3b0bb417291ab4d778359264b06feb44401e3a1a40062184.js create mode 100644 docs/categories/index.xml create mode 100644 docs/docs/borrowing/index.html create mode 100644 docs/docs/cargo-crates-and-basic-project-structure/index.html create mode 100644 docs/docs/code-organization/index.html create mode 100644 docs/docs/combinators/index.html create mode 100644 docs/docs/comments-and-documenting-the-code/index.html create mode 100644 docs/docs/control-flows/index.html create mode 100644 docs/docs/crates/index.html create mode 100644 docs/docs/custom-error-types/index.html create mode 100644 docs/docs/enums/index.html create mode 100644 docs/docs/error-and-none-propagation/index.html create mode 100644 docs/docs/functions-02/index.html create mode 100644 docs/docs/functions/index.html create mode 100644 docs/docs/generics/index.html create mode 100644 docs/docs/hello-world/index.html create mode 100644 docs/docs/impls-and-traits/index.html create mode 100644 docs/docs/index.html create mode 100644 docs/docs/index.xml create mode 100644 docs/docs/installation/index.html create mode 100644 docs/docs/learning_rust_medium.png create mode 100644 docs/docs/lifetimes/index.html create mode 100644 docs/docs/modules/index.html create mode 100644 docs/docs/operators/index.html create mode 100644 docs/docs/option-and-result/index.html create mode 100644 docs/docs/overview/index.html create mode 100644 docs/docs/ownership/index.html create mode 100644 docs/docs/panicking/index.html create mode 100644 docs/docs/primitive-data-types/index.html create mode 100644 docs/docs/rust_playground.png create mode 100644 docs/docs/smart-compiler/index.html create mode 100644 docs/docs/std-primitives-and-preludes/index.html create mode 100644 docs/docs/structs/index.html create mode 100644 docs/docs/unwrap-and-expect/index.html create mode 100644 docs/docs/use/index.html create mode 100644 docs/docs/variable-bindings-constants-and-statics/index.html create mode 100644 docs/docs/vectors/index.html create mode 100644 docs/docs/why-rust/index.html create mode 100644 docs/docs/workspaces/index.html create mode 100644 docs/favicon/android-chrome-192x192.png create mode 100644 docs/favicon/android-chrome-512x512.png create mode 100644 docs/favicon/apple-touch-icon.png create mode 100644 docs/favicon/favicon-16x16.png create mode 100644 docs/favicon/favicon-32x32.png create mode 100644 docs/favicon/favicon.ico create mode 100644 docs/index.html create mode 100644 docs/index.xml create mode 100644 docs/manifest.json create mode 100644 docs/sitemap.xml create mode 100644 docs/sw.js create mode 100644 docs/tags/index.xml diff --git a/docs/assets/css/docs.min.min.9deba2d55bb7534667e8b6e4ac842dd1330bdc793b12b633d5413d263a72db4a.css b/docs/assets/css/docs.min.min.9deba2d55bb7534667e8b6e4ac842dd1330bdc793b12b633d5413d263a72db4a.css new file mode 100644 index 0000000..9fbdde6 --- /dev/null +++ b/docs/assets/css/docs.min.min.9deba2d55bb7534667e8b6e4ac842dd1330bdc793b12b633d5413d263a72db4a.css @@ -0,0 +1 @@ +*:where(:not(html,iframe,canvas,img,svg,video,audio,pre,code):not(svg *,symbol *)){all:unset;display:revert}*,*::before,*::after{box-sizing:border-box}html{-moz-text-size-adjust:none;-webkit-text-size-adjust:none;text-size-adjust:none}a,button{cursor:revert}ol,ul,menu,summary{list-style:none}img{max-inline-size:100%;max-block-size:100%}table{border-collapse:collapse}input,textarea{-webkit-user-select:auto}textarea{white-space:revert}meter{-webkit-appearance:revert;appearance:revert}:where(pre){all:revert;box-sizing:border-box}::placeholder{color:unset}::marker{content:initial}:where([hidden]){display:none}:where([contenteditable]:not([contenteditable=false])){-moz-user-modify:read-write;-webkit-user-modify:read-write;overflow-wrap:break-word;-webkit-line-break:after-white-space;-webkit-user-select:auto}:where([draggable=true]){-webkit-user-drag:element}:where(dialog:modal){all:revert;box-sizing:border-box}pre,code{margin:0}::-webkit-details-marker{display:none}:root{--font-sans:ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-serif:ui-serif, Georgia, Cambria, "Times New Roman", Times, serif;--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--font-brand:"Arial", serif;--color:rgba(0, 0, 0, 1);--color-fade:rgba(0, 0, 0, .54);--color-nav:rgba(0, 0, 0, .7);--background:#ffffff;--background-grey:#f9f9f9;--background-grey-embed:#f0f0f0;--foreground:rgba(247, 247, 247, .25);--foreground-hover:rgba(220, 220, 220, .35);--foreground-highlight:#f5d41f;--color-highlight:#130606;--model-background:#ffffff;--model-foreground:rgba(247, 247, 247, .25);--model-box-shadow:0 8px 32px 0 rgba(31, 38, 135, .37);--padding:12px;--model-blur:10px;--border:#efefef;--border-nav:#dddddd;--radius:4px;--anchor:#235ce8;--hover:#547ce3;--chroma-base00:#f9f9f9;--chroma-base01:#e0e0e0;--chroma-base02:rgba(159, 218, 159, .2);--chroma-base03:#8e908c;--chroma-base04:#969896;--chroma-base05:#4d4d4c;--chroma-base06:#282a2e;--chroma-base07:#1d1f21;--chroma-base08:#c82829;--chroma-base09:#f5871f;--chroma-base0A:#eab700;--chroma-base0B:#718c00;--chroma-base0C:#3e999f;--chroma-base0D:#4271ae;--chroma-base0E:#8959a8;--chroma-base0F:#a3685a;--callout-info-backgound:#954ce3;--callout-info-color:#ffffff;--callout-info-anchor:#261627}:root[data-color=dark]{--color:rgba(255, 255, 255, 1);--color-fade:rgba(255, 255, 255, .5);--color-nav:rgba(255, 255, 255, .8);--background:#101010;--background-grey:#1e1e1e;--background-grey-embed:#2f2d2d;--foreground:rgba(19, 19, 19, 1);--foreground-hover:rgba(35, 35, 35, 1);--model-background:rgba(16, 16, 16, 1);--model-foreground:rgba(225, 225, 225, .05);--model-box-shadow:0 8px 32px 0 rgba(241, 235, 235, 0.1);--border:rgba(225, 225, 225, .1);--border-nav:rgba(255, 255, 255, .2);--anchor:#2e87f1;--hover:#044b9d;--chroma-base00:var(--background-grey)/*#080808*/;--chroma-base01:#393939;--chroma-base02:rgba(159, 218, 159, .1);--chroma-base03:#999999;--chroma-base04:#b4b7b4;--chroma-base05:#cccccc;--chroma-base06:#e0e0e0;--chroma-base07:#ffffff;--chroma-base08:#f2777a;--chroma-base09:#f99157;--chroma-base0A:#ffcc66;--chroma-base0B:#99cc99;--chroma-base0C:#66cccc;--chroma-base0D:#6699cc;--chroma-base0E:#cc99cc;--chroma-base0F:#a3685a}.site-logo{text-transform:uppercase;font-family:var(--font-brand);font-size:1.5em;color:transparent;-webkit-text-stroke:.5px var(--border);background:0 0;letter-spacing:3px;background:linear-gradient(45deg,#866ee7,#ea60da,#ed8f57,#fbd41d,#2cca91);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;font-weight:800}@media(min-width:2560px){body{zoom:1.2}}@media(min-width:3840px){body{zoom:1.6}}.btn{display:flex;padding:calc(var(--padding)/2);background:var(--foreground);border:1px solid var(--border);border-radius:var(--radius);gap:calc(var(--padding)/2);cursor:pointer;color:var(--color-nav)}.btn:hover{background:var(--foreground-hover)}html{scroll-behavior:smooth;scroll-padding:2em}body{display:flex;flex-direction:column;height:100%;color:var(--color);background:var(--background);font-family:var(--font-sans)}#outer-wrapper{display:flex}#aside-wrapper{width:85%;left:-85%;display:none;overflow-x:auto}#aside-wrapper>aside>div{display:flex;padding:var(--padding);justify-content:flex-end}#aside-wrapper>aside>a{display:none}#content-wrapper{display:flex;flex:1;flex-direction:column;min-height:100svh}main{display:flex;flex-direction:column;flex:1;width:100svw}#aside-wrapper.open{display:flex;flex-direction:column;position:fixed;top:0;height:100%;z-index:10;transition:.3s;animation:slide-in-left .3s forwards;background:var(--model-background);box-shadow:var(--model-box-shadow)}@keyframes slide-in-left{from{transform:translateX(0)}to{transform:translateX(100%)}}#content-wrapper>header{border-bottom:1px solid var(--border)}#content-wrapper>header>a{display:inline-block;padding:var(--padding)}#content-wrapper>footer{display:flex;flex-direction:column;padding:var(--padding)}#content-wrapper>footer>div{display:flex;align-items:center;justify-content:center;padding:var(--padding);gap:calc(var(--padding)/2);text-align:center;flex-wrap:wrap}#content-wrapper>footer>div:first-child{white-space:initial}#content-wrapper>footer>div:first-child a{background:var(--foreground-highlight);color:var(--color-highlight);border-radius:var(--radius);cursor:pointer;padding:0 calc(var(--padding)/2)}#content-wrapper>footer>div:nth-child(2){justify-content:flex-end}main>article{display:flex;flex:1;flex-direction:column}main>article>nav{display:flex;padding:calc(var(--padding) * 2)var(--padding)var(--padding);gap:12px;justify-content:space-between}main>article>header{padding:var(--padding)calc(var(--padding) * 2)}#article-body{display:flex;flex-direction:column;flex:1;padding:var(--padding)calc(var(--padding) * 2);overflow-x:auto}main>article>footer{display:grid;grid-template-columns:repeat(2,1fr);padding:0 calc(var(--padding) * 2)}main>article>footer>time{grid-column:1/3;display:flex;color:var(--color-fade);justify-content:center;padding:var(--padding)0;gap:calc(var(--padding)/2)}main>article>footer>a{display:flex;padding:var(--padding);gap:calc(var(--padding)/4);background:var(--foreground);color:var(--color-nav);border:1px solid var(--border);border-radius:var(--radius);cursor:pointer;width:50%}main>article>footer>a:hover{background:var(--foreground-hover)}main>article>footer>a.hidden{visibility:hidden}main>article>footer>a:last-child{display:flex;justify-content:end;margin-left:50%}main>aside{width:85%;right:-85%;display:none;overflow-x:auto}main>aside.open{display:flex;flex-direction:column;position:fixed;top:0;height:100%;z-index:10;transition:.3s;animation:slide-in-right .3s forwards;background:var(--model-background);box-shadow:var(--model-box-shadow)}#aside-wrapper{position:sticky;top:0}#aside-wrapper>aside>nav{padding:0 var(--padding)}#aside-wrapper>aside>nav>details{padding-bottom:0}#aside-wrapper>aside>nav>details[open]{padding-bottom:calc(var(--padding) * 1.5)}#aside-wrapper>aside>nav>details>summary{display:flex;padding:var(--padding)0;color:var(--color);font-weight:700}#aside-wrapper>aside>nav>details[open]>summary{color:var(--color-fade)}#aside-wrapper>aside>nav>details>ul>li{margin:0 calc(var(--padding)/2);border-left:1px solid var(--border-nav)}#aside-wrapper>aside>nav>details>ul>li>a{color:var(--color-nav);display:flex;cursor:pointer;padding:calc(var(--padding)/2)}#aside-wrapper>aside>nav>details>ul>li>a::before{content:'';display:inline-block;background:var(--background);width:calc(var(--padding)/2);height:calc(var(--padding)/2);transform:rotate(45deg);border:1px solid var(--border-nav);position:relative;left:calc((var(--padding) * -.78));top:3px}#aside-wrapper>aside>nav>details>ul>li>a.active{background:var(--foreground-highlight);color:var(--color-highlight);border-top-right-radius:var(--radius);border-bottom-right-radius:var(--radius)}#aside-wrapper>aside>nav>details>ul>li>a.active::before{background:var(--foreground-highlight);border:var(--foreground-highlight);left:calc((var(--padding) * -.76))}#aside-wrapper>aside>nav>details>ul>li>a:hover:not(.active){background:var(--foreground-hover);border-top-right-radius:var(--radius);border-bottom-right-radius:var(--radius)}main>aside>div{display:flex;padding:var(--padding)}main>aside>strong{display:flex;padding:var(--padding);color:var(--color-fade);font-weight:700}main>aside>nav{padding:0 var(--padding)}#TableOfContents ul{border-left:1px solid var(--border)}#TableOfContents a{color:var(--color-nav);display:inline-block;cursor:pointer;padding:calc(var(--padding)/2)}#TableOfContents a code{padding:calc(var(--padding)/3.7);border-radius:var(--radius);font-size:.9em}#TableOfContents ul a::before{content:'';display:inline-block;width:calc(var(--padding)/1.5);height:calc(var(--padding)/1.5);background:var(--background);border:1px solid var(--border-nav);position:relative;left:calc((var(--padding) * -.89));top:-3px;border-radius:30%;transform:rotate(45deg)}#TableOfContents a.active{background:var(--foreground-highlight);color:var(--color-highlight);border-top-right-radius:var(--radius);border-bottom-right-radius:var(--radius)}#TableOfContents ul a.active::before{background:var(--background)}#TableOfContents a:hover:not(.active){background:var(--foreground-hover);border-top-right-radius:var(--radius);border-bottom-right-radius:var(--radius)}#TableOfContents ul ul{margin-left:calc(var(--padding) * 1.75)}@keyframes slide-in-right{from{transform:translateX(0)}to{transform:translateX(-100%)}}body.model-open{overflow:hidden}#body-model-outer{display:none;content:"";position:fixed;top:0;left:0;width:100%;height:100%;z-index:5;background:var(--model-foreground);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}#aside-wrapper>aside>div .btn,main>aside>div>.btn{font-size:.75em;font-weight:800}@media(min-width:768px) and (max-width:1023px){#aside-wrapper{width:50%;left:-50%}main>aside{width:50%;right:-50%}}@media(min-width:1024px){:root{--padding:16px}main{flex-direction:row}main>article{width:75vw}main>aside{width:25%;display:flex;flex-direction:column;position:sticky;top:0;height:calc(100svh - 68px);overflow-x:auto}main>aside>div{display:none}main>article>nav>button:last-child{display:none}#content-wrapper>footer{padding:0 var(--padding);flex-direction:row}#content-wrapper>footer>div:first-child{width:75vw}#content-wrapper>footer>div:nth-child(2){width:25%}}@media(min-width:1024px) and (max-width:1279px){#aside-wrapper{width:33%;left:-33%}}@media(min-width:1280px){#aside-wrapper{width:20%;display:flex;flex-direction:column;height:100svh;background:var(--foreground);border-right:1px solid var(--border);overflow-x:auto}#aside-wrapper>aside>div{display:none}#aside-wrapper>aside>nav{overflow-x:auto}#content-wrapper>header{display:none}#aside-wrapper>aside>a{display:flex;padding:calc(var(--padding) * 2)var(--padding)}main{width:80svw;padding:0 calc(var(--padding) * 2)}main>article{width:60vw}main>article>nav{display:none}main>aside{width:25%}main>article>header{padding:calc(var(--padding) * 2)calc(var(--padding) * 2)var(--padding)}#content-wrapper>footer>div:first-child{width:60vw}#content-wrapper>footer>div:nth-child(2){width:25%}}main>article>header>h1{font-size:3em}main>article>header>p{font-size:1.25em;color:var(--color-fade);padding-top:var(--padding)}#article-body h1,#article-body h2,#article-body h3,#article-body h4,#article-body h5,#article-body h6{line-height:1em;font-weight:400;margin:2.6em 0 .1em;color:var(--color)}#article-body h1{font-size:1.8em}#article-body h2{font-size:1.5em}#article-body h3{font-size:1.3em}#article-body h4{font-size:1.1em}#article-body .highlight,#article-body blockquote,#article-body dl,#article-body iframe,#article-body ol,#article-body p,#article-body table,#article-body ul{margin-top:1em;line-height:1.8rem;letter-spacing:-.1px}#article-body blockquote p{margin:1em 0}#article-body blockquote dl,#article-body blockquote ol,#article-body blockquote ul{margin:0 1em 1em}#article-body a{color:var(--anchor);text-decoration:none}#article-body a:hover{color:var(--hover);text-decoration:underline}#article-body strong,#article-body b,#article-body table th{font-weight:600}#article-body em{font-style:italic}#article-body dl,#article-body ol,#article-body ul{margin-left:20px}#article-body dl dl,#article-body dl ol,#article-body dl ul,#article-body ol dl,#article-body ol ol,#article-body ol ul,#article-body ul dl,#article-body ul ol,#article-body ul ul{margin-top:0;margin-bottom:0}#article-body ul{list-style:disc}#article-body ol{list-style:decimal}#article-body dl{list-style:square}#article-body li>ul{list-style:circle}#article-body li>ol{list-style:lower-alpha}#article-body li p{margin:0}#article-body li .highlight,#article-body li blockquote,#article-body li iframe,#article-body li table{margin:1em 0}#article-body img,#article-body video{max-width:100%;border-radius:4px}#article-body blockquote{padding:8px 12px;position:relative;background:var(--background-grey);border-left-width:5px;border-radius:6px}#article-body blockquote footer{margin:1em 0;font-style:italic}#article-body blockquote footer cite:before{content:"β€”";padding:0 .3em}#article-body blockquote footer cite a{color:var(--border)}#article-body code,#article-body pre{font-family:var(--font-mono)}#article-body h1 code,#article-body h2 code,#article-body h3 code,#article-body h4 code,#article-body h5 code,#article-body h6 code,#article-body p code,#article-body blockquote code,#article-body ul code,#article-body ol code,#article-body dl code,#article-body table code{background:var(--background-grey);padding:calc(var(--padding)/3.7);border-radius:var(--radius);font-size:.9em}#article-body blockquote code{background:var(--background-grey-embed)}#article-body pre:not(.chroma){color:var(--chroma-base05);font-size:.9em;line-height:1.8;letter-spacing:-.1px;background-color:var(--chroma-base00);border-radius:6px;padding:16px 24px;overflow-x:auto;margin-top:1em}#article-body blockquote .chroma,#article-body blockquote pre:not(.chroma){background:var(--foreground-hover);margin-bottom:1em}#article-body blockquote .chroma code,#article-body blockquote pre:not(.chroma) code{padding:0}#article-body table{max-width:100%;border-radius:calc(var(--radius)*2);box-shadow:0 0 0 1px var(--border)}#article-body table td,#article-body table th{padding:5px 15px}#article-body table tr:nth-child(2n){background:var(--background-grey)}#article-body table thead tr{background:var(--background-grey-embed)}.chroma{font-size:.9em;color:var(--chroma-base05);background-color:var(--chroma-base00);border-radius:6px;padding:16px 24px;overflow-x:auto}.chroma .x{color:var(--chroma-base05)}.chroma .err{color:var(--chroma-base08)}.chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.chroma .lntable{border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block}.chroma .hl{display:block;width:100%;background-color:var(--chroma-base02)}.chroma .lnt{margin-right:.4em;padding:0 .4em}.chroma .ln{margin-right:.4em;padding:0 .4em;border-right:1px solid var(--chroma-base0A)}.chroma .line{display:flex}.chroma .k{color:var(--chroma-base0E)}.chroma .kc{color:var(--chroma-base0E)}.chroma .kd{color:var(--chroma-base0E)}.chroma .kn{color:var(--chroma-base0E)}.chroma .kp{color:var(--chroma-base0D)}.chroma .kr{color:var(--chroma-base0E)}.chroma .kt{color:var(--chroma-base0E)}.chroma .n{color:var(--chroma-base05)}.chroma .na{color:var(--chroma-base05)}.chroma .nb{color:var(--chroma-base0D)}.chroma .bp{color:var(--chroma-base0D)}.chroma .nc{color:var(--chroma-base0A)}.chroma .no{color:var(--chroma-base09)}.chroma .nd{color:var(--chroma-base09)}.chroma .ni{color:var(--chroma-base0A)}.chroma .ne{color:var(--chroma-base0A)}.chroma .nf{color:var(--chroma-base05)}.chroma .fm{color:var(--chroma-base05)}.chroma .nl{color:var(--chroma-base08)}.chroma .nn{color:var(--chroma-base0A)}.chroma .nx{color:var(--chroma-base0D)}.chroma .py{color:var(--chroma-base08)}.chroma .nt{color:var(--chroma-base0D)}.chroma .nv{color:var(--chroma-base0D)}.chroma .vc{color:var(--chroma-base0D)}.chroma .vg{color:var(--chroma-base0D)}.chroma .vi{color:var(--chroma-base08)}.chroma .vm{color:var(--chroma-base0D)}.chroma .l{color:var(--chroma-base0B)}.chroma .ld{color:var(--chroma-base0B)}.chroma .s{color:var(--chroma-base0B)}.chroma .sa{color:var(--chroma-base0B)}.chroma .sb{color:var(--chroma-base0B)}.chroma .sc{color:var(--chroma-base0B)}.chroma .dl{color:var(--chroma-base0F)}.chroma .sd{color:var(--chroma-base03)}.chroma .s2{color:var(--chroma-base0B)}.chroma .se{color:var(--chroma-base0C)}.chroma .sh{color:var(--chroma-base0B)}.chroma .si{color:var(--chroma-base0F)}.chroma .sx{color:var(--chroma-base0B)}.chroma .sr{color:var(--chroma-base0C)}.chroma .s1{color:var(--chroma-base0B)}.chroma .ss{color:var(--chroma-base0B)}.chroma .m{color:var(--chroma-base09)}.chroma .mb{color:var(--chroma-base09)}.chroma .mf{color:var(--chroma-base09)}.chroma .mh{color:var(--chroma-base09)}.chroma .mi{color:var(--chroma-base09)}.chroma .il{color:var(--chroma-base09)}.chroma .mo{color:var(--chroma-base09)}.chroma .o{color:var(--chroma-base05)}.chroma .ow{color:var(--chroma-base05)}.chroma .p{color:var(--chroma-base05)}.chroma .c{color:var(--chroma-base03)}.chroma .ch{color:var(--chroma-base03)}.chroma .cm{color:var(--chroma-base03)}.chroma .c1{color:var(--chroma-base03)}.chroma .cs{color:var(--chroma-base03)}.chroma .cp{color:var(--chroma-base0F)}.chroma .cpf{color:var(--chroma-base0B)}.chroma .g{color:var(--chroma-base05)}.chroma .gd{color:var(--chroma-base08)}.chroma .ge{color:var(--chroma-base05);font-style:italic}.chroma .gr{color:var(--chroma-base05)}.chroma .gh{color:var(--chroma-base0D)}.chroma .gi{color:var(--chroma-base0B)}.chroma .go{color:var(--chroma-base05)}.chroma .gp{color:var(--chroma-base05)}.chroma .gs{color:var(--chroma-base05);font-weight:700}.chroma .gu{color:var(--chroma-base0D)}.chroma .gt{color:var(--chroma-base05)}.chroma .gl{color:var(--chroma-base05);text-decoration:underline}.chroma .w{color:var(--chroma-base00)}#article-body blockquote.info{border:none;background:var(--callout-info-backgound);color:var(--callout-info-color)}#article-body blockquote.info>p{display:flex;gap:calc(var(--padding)/2)}#article-body blockquote.info>p>strong:first-child{font-size:2.5em}#article-body blockquote.info code{background:rgba(0,0,0,.1)}#article-body blockquote.info a{color:var(--callout-info-anchor);text-shadow:0 0 1px var(--callout-info-color)}#article-body blockquote.info a code{background:rgba(255,255,255,.2)} \ No newline at end of file diff --git a/docs/assets/css/home.min.min.c5c3b8755137be47315c6aa021236da2de84cec9a20c5cf6973f9887f4ff79d1.css b/docs/assets/css/home.min.min.c5c3b8755137be47315c6aa021236da2de84cec9a20c5cf6973f9887f4ff79d1.css new file mode 100644 index 0000000..c9fec8a --- /dev/null +++ b/docs/assets/css/home.min.min.c5c3b8755137be47315c6aa021236da2de84cec9a20c5cf6973f9887f4ff79d1.css @@ -0,0 +1 @@ +*:where(:not(html,iframe,canvas,img,svg,video,audio,pre,code):not(svg *,symbol *)){all:unset;display:revert}*,*::before,*::after{box-sizing:border-box}html{-moz-text-size-adjust:none;-webkit-text-size-adjust:none;text-size-adjust:none}a,button{cursor:revert}ol,ul,menu,summary{list-style:none}img{max-inline-size:100%;max-block-size:100%}table{border-collapse:collapse}input,textarea{-webkit-user-select:auto}textarea{white-space:revert}meter{-webkit-appearance:revert;appearance:revert}:where(pre){all:revert;box-sizing:border-box}::placeholder{color:unset}::marker{content:initial}:where([hidden]){display:none}:where([contenteditable]:not([contenteditable=false])){-moz-user-modify:read-write;-webkit-user-modify:read-write;overflow-wrap:break-word;-webkit-line-break:after-white-space;-webkit-user-select:auto}:where([draggable=true]){-webkit-user-drag:element}:where(dialog:modal){all:revert;box-sizing:border-box}pre,code{margin:0}::-webkit-details-marker{display:none}:root{--font-sans:ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-serif:ui-serif, Georgia, Cambria, "Times New Roman", Times, serif;--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--font-brand:"Arial", serif;--color:rgba(0, 0, 0, 1);--color-fade:rgba(0, 0, 0, .54);--color-nav:rgba(0, 0, 0, .7);--background:#ffffff;--background-grey:#f9f9f9;--background-grey-embed:#f0f0f0;--foreground:rgba(247, 247, 247, .25);--foreground-hover:rgba(220, 220, 220, .35);--foreground-highlight:#f5d41f;--color-highlight:#130606;--model-background:#ffffff;--model-foreground:rgba(247, 247, 247, .25);--model-box-shadow:0 8px 32px 0 rgba(31, 38, 135, .37);--padding:12px;--model-blur:10px;--border:#efefef;--border-nav:#dddddd;--radius:4px;--anchor:#235ce8;--hover:#547ce3;--chroma-base00:#f9f9f9;--chroma-base01:#e0e0e0;--chroma-base02:rgba(159, 218, 159, .2);--chroma-base03:#8e908c;--chroma-base04:#969896;--chroma-base05:#4d4d4c;--chroma-base06:#282a2e;--chroma-base07:#1d1f21;--chroma-base08:#c82829;--chroma-base09:#f5871f;--chroma-base0A:#eab700;--chroma-base0B:#718c00;--chroma-base0C:#3e999f;--chroma-base0D:#4271ae;--chroma-base0E:#8959a8;--chroma-base0F:#a3685a;--callout-info-backgound:#954ce3;--callout-info-color:#ffffff;--callout-info-anchor:#261627}:root[data-color=dark]{--color:rgba(255, 255, 255, 1);--color-fade:rgba(255, 255, 255, .5);--color-nav:rgba(255, 255, 255, .8);--background:#101010;--background-grey:#1e1e1e;--background-grey-embed:#2f2d2d;--foreground:rgba(19, 19, 19, 1);--foreground-hover:rgba(35, 35, 35, 1);--model-background:rgba(16, 16, 16, 1);--model-foreground:rgba(225, 225, 225, .05);--model-box-shadow:0 8px 32px 0 rgba(241, 235, 235, 0.1);--border:rgba(225, 225, 225, .1);--border-nav:rgba(255, 255, 255, .2);--anchor:#2e87f1;--hover:#044b9d;--chroma-base00:var(--background-grey)/*#080808*/;--chroma-base01:#393939;--chroma-base02:rgba(159, 218, 159, .1);--chroma-base03:#999999;--chroma-base04:#b4b7b4;--chroma-base05:#cccccc;--chroma-base06:#e0e0e0;--chroma-base07:#ffffff;--chroma-base08:#f2777a;--chroma-base09:#f99157;--chroma-base0A:#ffcc66;--chroma-base0B:#99cc99;--chroma-base0C:#66cccc;--chroma-base0D:#6699cc;--chroma-base0E:#cc99cc;--chroma-base0F:#a3685a}.site-logo{text-transform:uppercase;font-family:var(--font-brand);font-size:1.5em;color:transparent;-webkit-text-stroke:.5px var(--border);background:0 0;letter-spacing:3px;background:linear-gradient(45deg,#866ee7,#ea60da,#ed8f57,#fbd41d,#2cca91);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;font-weight:800}@media(min-width:2560px){body{zoom:1.2}}@media(min-width:3840px){body{zoom:1.6}}.btn{display:flex;padding:calc(var(--padding)/2);background:var(--foreground);border:1px solid var(--border);border-radius:var(--radius);gap:calc(var(--padding)/2);cursor:pointer;color:var(--color-nav)}.btn:hover{background:var(--foreground-hover)}html{scroll-behavior:smooth;scroll-padding:2em}body{display:flex;flex-direction:column;height:100%;color:var(--color);background:var(--background);font-family:var(--font-sans)}#content-wrapper{display:flex;flex:1;flex-direction:column;min-height:100svh}#content-wrapper>header{border-bottom:1px solid var(--border)}#content-wrapper>header>a{display:inline-block;padding:var(--padding)}#content-wrapper>footer{display:flex;flex-direction:column;padding:var(--padding)}#content-wrapper>footer>div{display:flex;align-items:center;justify-content:center;padding:var(--padding);gap:calc(var(--padding)/2);text-align:center;flex-wrap:wrap}#content-wrapper>footer>div:first-child{white-space:initial}#content-wrapper>footer>div:first-child a{background:var(--foreground-highlight);color:var(--color-highlight);border-radius:var(--radius);cursor:pointer;padding:0 calc(var(--padding)/2)}#content-wrapper>footer>div:nth-child(2){justify-content:flex-end}main{display:flex;flex:1;flex-direction:column;align-items:center;justify-content:center}main>section{display:flex}main>section>div{display:flex;flex-direction:column}main>section>div>header{display:flex;flex-direction:column;text-align:center;padding:calc(var(--padding)*2)var(--padding);cursor:url("data:image/svg+xml;utf8, πŸ¦„"),auto}main>section>div>header>h1{display:flex;font-size:2.5em;font-weight:800;padding-bottom:calc(var(--padding)*1.2);gap:var(--padding);flex-wrap:wrap;justify-content:center}main>section>div>header>h1>span{color:#866ee7}main>section>div>header>p{color:var(--color-fade);font-size:1.2em}main>section>div>div{display:flex;justify-content:center;gap:calc(var(--padding)*2)}main>section>div>div>.btn{font-size:1.1em;padding:.4em 1em}main>section>div>div>.btn:first-child,main>section>div>div>.btn:first-child:hover{background:var(--foreground-highlight);color:var(--color-highlight)}main>section>div>div>.btn:last-child,main>section>div>div>.btn:last-child:hover{background:var(--foreground-hover)}@media(min-width:1024px){main>section>div>header{padding:calc(var(--padding)*2)calc(var(--padding)*2)calc(var(--padding)*3)}main>section>div>header>h1{font-size:3em}main>section>div>header>p{font-size:1.4em}main>section>div>div{gap:calc(var(--padding)*2.5)}main>section>div>div>.btn{font-size:1.27em}}@media(min-width:1280px){main>section>div>header{padding:calc(var(--padding)*2)calc(var(--padding)*3)calc(var(--padding)*6)}main>section>div>header>h1{font-size:4em}main>section>div>header>p{font-size:1.6em}main>section>div>div{gap:calc(var(--padding)*2.6)}main>section>div>div>.btn{font-size:1.5em}} \ No newline at end of file diff --git a/docs/assets/js/docs.min.min.12ffdc25c0149ef34e761ee54587f2aae17affcb8375298ad2180851930cb142.js b/docs/assets/js/docs.min.min.12ffdc25c0149ef34e761ee54587f2aae17affcb8375298ad2180851930cb142.js new file mode 100644 index 0000000..a028e8a --- /dev/null +++ b/docs/assets/js/docs.min.min.12ffdc25c0149ef34e761ee54587f2aae17affcb8375298ad2180851930cb142.js @@ -0,0 +1 @@ +const lsKeyColorPreference="color-preference",getColorPreference=()=>{let e=localStorage.getItem(lsKeyColorPreference);return e!==null?e:window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"};let colorPreference=getColorPreference();localStorage.setItem(lsKeyColorPreference,colorPreference),document.firstElementChild.setAttribute("data-color",colorPreference);const colorPreferenceButton=document.querySelector("#content-wrapper > footer > div:last-child > button:last-child");colorPreferenceButton&&colorPreferenceButton.addEventListener("click",function(){colorPreference=="dark"?colorPreference="light":colorPreference="dark",setColorPreference()});const setColorPreference=()=>{localStorage.setItem(lsKeyColorPreference,colorPreference),document.firstElementChild.setAttribute("data-color",colorPreference)};window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",({matches:e})=>{colorPreference=e?"dark":"light",setColorPreference()});const body=document.body,bodyModelOuter=document.querySelector("#body-model-outer"),asideWrapper=document.querySelector("#aside-wrapper"),asideWrapperOpenButton=document.querySelector("main > article > nav > button:first-child"),asideWrapperCloseButton=document.querySelector("#aside-wrapper > aside > div .btn");asideWrapper&&asideWrapperOpenButton&&asideWrapperOpenButton.addEventListener("click",function(){body.classList.add("model-open"),bodyModelOuter.style.display="block",asideWrapper.classList.add("open"),asideWrapperCloseButton.addEventListener("click",function(){body.classList.remove("model-open"),bodyModelOuter.style.display="none",asideWrapper.classList.remove("open")}),bodyModelOuter.addEventListener("click",function(){body.classList.remove("model-open"),bodyModelOuter.style.display="none",asideWrapper.classList.remove("open")})});const mainAside=document.querySelector("main > aside"),mainAsideOpenButton=document.querySelector("main > article > nav > button:last-child"),mainAsideCloseButton=document.querySelector("main > aside > div > .btn");mainAside&&mainAsideOpenButton&&mainAsideOpenButton.addEventListener("click",function(){body.classList.add("model-open"),bodyModelOuter.style.display="block",mainAside.classList.add("open"),mainAsideCloseButton.addEventListener("click",function(){body.classList.remove("model-open"),bodyModelOuter.style.display="none",mainAside.classList.remove("open")}),bodyModelOuter.addEventListener("click",function(){body.classList.remove("model-open"),bodyModelOuter.style.display="none",mainAside.classList.remove("open")})}),window.addEventListener("resize",function(){body.classList.contains("model-open")&&(body.classList.remove("model-open"),bodyModelOuter.style.display="none",mainAside.classList.contains("open")&&mainAside.classList.remove("open"),asideWrapper.classList.contains("open")&&asideWrapper.classList.remove("open"))});const asideWrapperSiteLogo=document.querySelector("#aside-wrapper .site-logo"),asideWrapperAsideNav=document.querySelector("#aside-wrapper > aside > nav"),adjustAsideWrapperAsideNavHeight=function(){window.innerWidth>1280?asideWrapperAsideNav.style.height=`${window.innerHeight-1-asideWrapperSiteLogo.getBoundingClientRect().height}px`:asideWrapperAsideNav.style.height=""};adjustAsideWrapperAsideNavHeight(),window.addEventListener("resize",function(){adjustAsideWrapperAsideNavHeight()}),"IntersectionObserver"in window&&document.addEventListener("DOMContentLoaded",function(){const n=document.querySelectorAll("#TableOfContents a");let e=null;const t={},s=new IntersectionObserver(n=>{n.forEach(n=>{n.isIntersecting&&(e&&e.classList.remove("active"),e=t[n.target.id],e&&e.classList.add("active"))})},{rootMargin:`0% 0% -80% 0%`});n.forEach(e=>{const n=e.getAttribute("href")?e.getAttribute("href").slice(1):null;if(n){const o=document.getElementById(n);o&&(t[n]=e,s.observe(o))}e.addEventListener("click",function(){body.classList.contains("model-open")&&mainAsideCloseButton.click()})})}) \ No newline at end of file diff --git a/docs/assets/js/home.min.min.c8547379013b8a9d3b0bb417291ab4d778359264b06feb44401e3a1a40062184.js b/docs/assets/js/home.min.min.c8547379013b8a9d3b0bb417291ab4d778359264b06feb44401e3a1a40062184.js new file mode 100644 index 0000000..fc74dea --- /dev/null +++ b/docs/assets/js/home.min.min.c8547379013b8a9d3b0bb417291ab4d778359264b06feb44401e3a1a40062184.js @@ -0,0 +1 @@ +const lsKeyColorPreference="color-preference",getColorPreference=()=>{let e=localStorage.getItem(lsKeyColorPreference);return e!==null?e:window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"};let colorPreference=getColorPreference();localStorage.setItem(lsKeyColorPreference,colorPreference),document.firstElementChild.setAttribute("data-color",colorPreference);const colorPreferenceButton=document.querySelector("#content-wrapper > footer > div:last-child > button:last-child");colorPreferenceButton&&colorPreferenceButton.addEventListener("click",function(){colorPreference=="dark"?colorPreference="light":colorPreference="dark",setColorPreference()});const setColorPreference=()=>{localStorage.setItem(lsKeyColorPreference,colorPreference),document.firstElementChild.setAttribute("data-color",colorPreference)};window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",({matches:e})=>{colorPreference=e?"dark":"light",setColorPreference()}) \ No newline at end of file diff --git a/docs/categories/index.xml b/docs/categories/index.xml new file mode 100644 index 0000000..e1b06b4 --- /dev/null +++ b/docs/categories/index.xml @@ -0,0 +1,11 @@ + + + + Categories on Learning Rust + https://learning-rust.github.io/categories/ + Recent content in Categories on Learning Rust + Hugo -- gohugo.io + en-US + + + diff --git a/docs/docs/borrowing/index.html b/docs/docs/borrowing/index.html new file mode 100644 index 0000000..bd25bf4 --- /dev/null +++ b/docs/docs/borrowing/index.html @@ -0,0 +1,716 @@ + + + + + + + + + + + + + Borrowing Β· Learning Rust + + + + + + + + + + + + + + +
+ + + +
+
+ +
+ +
+
+ +
+

Borrowing

+

+
+
+

In real life applications, most of the times we have to pass variable bindings to other functions or assign them to other variable bindings. In this case, we are referencing the original binding; borrow the data of it.

+

What is Borrowing?

+
+

Borrow (verb)
+To receive something with the promise of returning it.

+
+

Shared & Mutable borrowings

+

⭐️ There are two types of Borrowing,

+
    +
  1. +

    Shared Borrowing (&T)

    +
      +
    • A piece of data can be borrowed by a single or multiple users, but data should not be altered.
    • +
    +
  2. +
  3. +

    Mutable Borrowing (&mut T)

    +
      +
    • A piece of data can be borrowed and altered by a single user, but the data should not be accessible for any other users at that time.
    • +
    +
  4. +
+

Rules for borrowings

+

There are very important rules regarding borrowing,

+
    +
  1. +

    One piece of data can be borrowed either as a shared borrow or as a mutable borrow at a given time. But not both at the same time.

    +
  2. +
  3. +

    Borrowing applies for both copy types and move types.

    +
  4. +
  5. +

    The concept of Liveness ↴

    +
  6. +
+
fn main() {
+  let mut a = vec![1, 2, 3];
+  let b = &mut a;  //  &mut borrow of `a` starts here
+                   //  ⁝
+  // some code     //  ⁝
+  // some code     //  ⁝
+}                  //  &mut borrow of `a` ends here
+
+
+fn main() {
+  let mut a = vec![1, 2, 3];
+  let b = &mut a;  //  &mut borrow of `a` starts here
+  // some code
+
+  println!("{:?}", a); // trying to access `a` as a shared borrow, so giving an error
+}                  //  &mut borrow of `a` ends here
+
+
+fn main() {
+  let mut a = vec![1, 2, 3];
+  {
+    let b = &mut a;  //  &mut borrow of `a` starts here
+    // any other code
+  }                  //  &mut borrow of `a` ends here
+
+  println!("{:?}", a); // allow borrowing `a` as a shared borrow
+}
+

πŸ’‘ Let’s see how to use shared and mutable borrowings in examples.

+

Examples for Shared Borrowing

+
fn main() {
+    let a = [1, 2, 3];
+    let b = &a;
+    println!("{:?} {}", a, b[0]); // [1, 2, 3] 1
+}
+
+
+fn main() {
+    let a = vec![1, 2, 3];
+    let b = get_first_element(&a);
+
+    println!("{:?} {}", a, b); // [1, 2, 3] 1
+}
+
+fn get_first_element(a: &Vec<i32>) -> i32 {
+    a[0]
+}
+

Examples for Mutable Borrowing

+
fn main() {
+    let mut a = [1, 2, 3];
+    let b = &mut a;
+    b[0] = 4;
+    println!("{:?}", b); // [4, 2, 3]
+}
+
+
+fn main() {
+    let mut a = [1, 2, 3];
+    {
+        let b = &mut a;
+        b[0] = 4;
+    }
+
+    println!("{:?}", a); // [4, 2, 3]
+}
+
+
+fn main() {
+    let mut a = vec![1, 2, 3];
+    let b = change_and_get_first_element(&mut a);
+
+    println!("{:?} {}", a, b); // [4, 2, 3] 4
+}
+
+fn change_and_get_first_element(a: &mut Vec<i32>) -> i32 {
+    a[0] = 4;
+    a[0]
+}
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + οΉ€ Previous + + + + Next οΉ₯ + + +
+
+ + +
+ +
+
πŸ§‘β€πŸ’»Built by and copyrightDumindu MadunuwanπŸ“… 2016-2023πŸš€ GitHub
+
+ +
+
+
+ +
+ +
+ + + \ No newline at end of file diff --git a/docs/docs/cargo-crates-and-basic-project-structure/index.html b/docs/docs/cargo-crates-and-basic-project-structure/index.html new file mode 100644 index 0000000..e91b5e3 --- /dev/null +++ b/docs/docs/cargo-crates-and-basic-project-structure/index.html @@ -0,0 +1,589 @@ + + + + + + + + + + + + + Cargo, Crates and Basic Project Structure Β· Learning Rust + + + + + + + + + + + + + + +
+ + + +
+
+ +
+ +
+
+ +
+

Cargo, Crates and Basic Project Structure

+

+
+
+

Cargo

+

Cargo is Rust’s built-in package manager and the build system. It can be used to,

+
    +
  • Create a new project: cargo new
  • +
  • Create a new project in an existing directory: cargo init
  • +
  • Build the project: cargo build
  • +
  • Run the project: cargo run
  • +
  • Update project dependencies: cargo update
  • +
  • Run tests: cargo test
  • +
  • Run benchmarks: cargo bench
  • +
  • Generate the project documentation via rustdoc: cargo doc
  • +
  • Analyze the project to see it has any errors, without building it: cargo check
  • +
+

In addition, there are cargo commands to publish the project as a crate/ package to Rust’s official crate registry, crates.io.

+
+

πŸ’‘ We need to get an API token from crates.io to publish a crate to it. The API token can be found in the Account Settings page, after login to that site. We will discuss more about this under code organization with crates.

+
+
    +
  • Login to crates.io with the API token: cargo login
  • +
  • Make the local crate uploadable to crates.io: cargo package
  • +
  • Upload the crate to crates.io: cargo publish
  • +
  • Install a Rust binary: cargo install
  • +
  • Uninstall a Rust binary: cargo uninstall
  • +
+

Crate

+

A crate is a package, which can be shared via crates.io. A crate can produce an executable or a library. In other words, it can be a binary crate or a library crate.

+
    +
  1. cargo new crate_name --bin or cargo new crate_name: Produces an executable
  2. +
  3. cargo new crate_name --lib: Produces a library
  4. +
+

The first one generates,

+
β”œβ”€β”€ Cargo.toml
+└── src
+    └── main.rs
+

and the second one generates,

+
β”œβ”€β”€ Cargo.toml
+└── src
+    └── lib.rs
+
    +
  • Cargo.toml(capital c) is the configuration file which contains all of the metadata that Cargo needs to compile your project.
  • +
  • src folder is the place to store the source code.
  • +
  • Each crate has an implicit crate root/ entry point. main.rs is the crate root for a binary crate and lib.rs is the crate root for a library crate.
  • +
+
+

πŸ’‘ When we build a binary crate via cargo build or cargo run, the executable file will be stored in the target/debug/ folder. But when building it via cargo build --release for a release it will be stored in the target/release/ folder. The release builds are applying more optimizations while compiling the code, to make the code run faster. But it takes more compile time.

+
+

Project Structure

+

This is how Cargo documentation describes about the recommended project layout,

+
.
+β”œβ”€β”€ Cargo.toml
+β”œβ”€β”€ Cargo.lock
+β”œβ”€β”€ src
+β”‚   β”œβ”€β”€ main.rs
+β”‚   β”œβ”€β”€ lib.rs
+β”‚   └── bin
+β”‚       └── another_executable.rs
+β”œβ”€β”€ tests
+β”‚   └── some_integration_tests.rs
+β”œβ”€β”€ benches
+β”‚   └── simple_bench.rs
+└── examples
+    └── simple_example.rs
+
    +
  • The source code goes in the src directory. +
      +
    • The default executable file is src/main.rs.
    • +
    • The default library file is src/lib.rs.
    • +
    • Other executables can be placed in src/bin/*.rs.
    • +
    +
  • +
  • Integration tests go in the tests directory (unit tests go in each file they’re testing).
  • +
  • Benchmarks go in the benches directory.
  • +
  • Examples go in the examples directory.
  • +
+

Rust Editions

+

After the initial release in 2015, according to the feedback got from user communities, the Rust team was focusing to increase the productivity of the language and the ecosystem. After 3 years of hard work in 2018, a new Rust edition was released with new features, simplified syntax and better tooling. We call it Rust 2018 edition.

+

To keep the promise of supporting backward compatibility, the new edition = "2018" configuration was added to the Cargo.toml file. For new projects, the cargo new command adds this configuration by default. So, you don’t need to care. But on legacy crates, if you can not see any edition configuration, Cargo will consider it as a Rust 2015 edition crate.

+

πŸ‘¨β€πŸ« Before going to the next…

+
    +
  • +

    The .cargo/bin directory of your home directory is the default location of Rust binaries. Not only the official binaries like rustup, rustc, cargo, rustfmt, rustdoc, rls and also the binaries you can install via cargo install command, will be stored in this directory.

    +
  • +
  • +

    Even though the initial convention for naming crates and file names is using the snake_case, some crate developers are using kebab-case on both crates and file names. To make your code more consistent, use the initial convention snake_case; especially on file names.

    +
  • +
  • +

    Create an executable crate via cargo new command and run it via cargo run.

    +
  • +
  • +

    Create a library crate via cargo new command and run cargo test.

    +
  • +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + οΉ€ Previous + + + + Next οΉ₯ + + +
+
+ + +
+ +
+
πŸ§‘β€πŸ’»Built by and copyrightDumindu MadunuwanπŸ“… 2016-2023πŸš€ GitHub
+
+ +
+
+
+ +
+ +
+ + + \ No newline at end of file diff --git a/docs/docs/code-organization/index.html b/docs/docs/code-organization/index.html new file mode 100644 index 0000000..5278e85 --- /dev/null +++ b/docs/docs/code-organization/index.html @@ -0,0 +1,647 @@ + + + + + + + + + + + + + Code Organization Β· Learning Rust + + + + + + + + + + + + + + +
+ + + +
+
+ +
+ +
+
+ +
+

Code Organization

+

+
+
+

When a single code block is getting larger, it should be decomposed into smaller pieces and should be organized in a proper manner. Rust supports different levels of code organization.

+

1. Functions

+

2. Modules

+

Can be mapped to a,

+
    +
  • Inline module
  • +
  • File
  • +
  • Directory hierarchy
  • +
+

3. Crates

+

Can be mapped to a,

+
    +
  • +

    lib.rs file on the same executable crate

    +
  • +
  • +

    Dependency crate specified on Cargo.toml

    +

    Can be specified from,

    +
      +
    • Path
    • +
    • Git repository
    • +
    • crates.io
    • +
    +
  • +
+

4. Workspaces

+

Helps to manage multiple crates as a single project.

+

Let’s discuss one by one.

+
+

πŸ’‘ To make examples more simpler, we use a simple function which prints β€œHello, world!”. But regarding writing testable codes, always try to return the String from the function and print it when calling it, instead of printing the String inside the function.

+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + οΉ€ Previous + + + + Next οΉ₯ + + +
+
+ + +
+ +
+
πŸ§‘β€πŸ’»Built by and copyrightDumindu MadunuwanπŸ“… 2016-2023πŸš€ GitHub
+
+ +
+
+
+ +
+ +
+ + + \ No newline at end of file diff --git a/docs/docs/combinators/index.html b/docs/docs/combinators/index.html new file mode 100644 index 0000000..0c649e6 --- /dev/null +++ b/docs/docs/combinators/index.html @@ -0,0 +1,1004 @@ + + + + + + + + + + + + + Combinators Β· Learning Rust + + + + + + + + + + + + + + +
+ + + +
+
+ +
+ +
+
+ +
+

Combinators

+

+
+
+

What is a combinator?

+
    +
  • +

    One meaning of β€œcombinator” is a more informal sense referring to the combinator pattern, a style of organizing libraries centered around the idea of combining things. Usually there is some type T, some functions for constructing β€œprimitive” values of type T, and some β€œcombinators” which can combine values of type T in various ways to build up more complex values of type T. The other definition is “function with no free variables”. +__ wiki.haskell.org

    +
  • +
  • +

    A combinator is a function which builds program fragments from program fragments; in a sense the programmer using combinators constructs much of the desired program automatically, rather that writing every detail by hand. +__ John Hughesβ€”Generalizing Monads to Arrows via Functional Programming Concepts

    +
  • +
+

The exact definition of “combinators” in Rust ecosystem is bit unclear.Β 

+
    +
  • +

    or(), and(), or_else(), and_then()

    +
      +
    • Combine two values of type T and return same type T.
    • +
    +
  • +
  • +

    filter() for Option types

    +
      +
    • Filter type T by using a closure as a conditional function
    • +
    • Return same type T
    • +
    +
  • +
  • +

    map(), map_err()

    +
      +
    • Convert type T by applying a closure.
    • +
    • The data type of the value inside T can be changed. +ex. Some<&str> can be converted to Some<usize> or Err<&str> to Err<isize> and etc.
    • +
    +
  • +
  • +

    map_or(), map_or_else()

    +
      +
    • Transform type T by applying a closure & return the value inside type T.
    • +
    • For None and Err, a default value or another closure is applied.
    • +
    +
  • +
  • +

    ok_or(), ok_or_else() for Option types

    +
      +
    • Transform Option type into a Result type.
    • +
    +
  • +
  • +

    as_ref(), as_mut()

    +
      +
    • Transform type T into a reference or a mutable reference.
    • +
    +
  • +
+

or() and and()

+

While combining two expressions, which return either Option/ Result

+
    +
  • or(): If either one got Some or Ok, that value returns immediately.
  • +
  • and(): If both got Some or Ok, the value in the second expression returns. If either one got None or Err that value returns immediately.
  • +
+
fn main() {
+  let s1 = Some("some1");
+  let s2 = Some("some2");
+  let n: Option<&str> = None;
+
+  let o1: Result<&str, &str> = Ok("ok1");
+  let o2: Result<&str, &str> = Ok("ok2");
+  let e1: Result<&str, &str> = Err("error1");
+  let e2: Result<&str, &str> = Err("error2");
+
+  assert_eq!(s1.or(s2), s1); // Some1 or Some2 = Some1
+  assert_eq!(s1.or(n), s1);  // Some or None = Some
+  assert_eq!(n.or(s1), s1);  // None or Some = Some
+  assert_eq!(n.or(n), n);    // None1 or None2 = None2
+
+  assert_eq!(o1.or(o2), o1); // Ok1 or Ok2 = Ok1
+  assert_eq!(o1.or(e1), o1); // Ok or Err = Ok
+  assert_eq!(e1.or(o1), o1); // Err or Ok = Ok
+  assert_eq!(e1.or(e2), e2); // Err1 or Err2 = Err2
+
+  assert_eq!(s1.and(s2), s2); // Some1 and Some2 = Some2
+  assert_eq!(s1.and(n), n);   // Some and None = None
+  assert_eq!(n.and(s1), n);   // None and Some = None
+  assert_eq!(n.and(n), n);    // None1 and None2 = None1
+  
+  assert_eq!(o1.and(o2), o2); // Ok1 and Ok2 = Ok2
+  assert_eq!(o1.and(e1), e1); // Ok and Err = Err
+  assert_eq!(e1.and(o1), e1); // Err and Ok = Err
+  assert_eq!(e1.and(e2), e1); // Err1 and Err2 = Err1
+}
+
+

πŸ”Ž Rust nightly support xor() for Option types, which returns Some only if one expression got Some, but not both.

+
+

or_else()

+

Similar to or(). The only difference is, the second expression should be a closure which returns same type T.

+
fn main() {
+    // or_else with Option
+    let s1 = Some("some1");
+    let s2 = Some("some2");
+    let fn_some = || Some("some2"); // similar to: let fn_some = || -> Option<&str> { Some("some2") };
+
+    let n: Option<&str> = None;
+    let fn_none = || None;
+
+    assert_eq!(s1.or_else(fn_some), s1);  // Some1 or_else Some2 = Some1
+    assert_eq!(s1.or_else(fn_none), s1);  // Some or_else None = Some
+    assert_eq!(n.or_else(fn_some), s2);   // None or_else Some = Some
+    assert_eq!(n.or_else(fn_none), None); // None1 or_else None2 = None2
+
+    // or_else with Result
+    let o1: Result<&str, &str> = Ok("ok1");
+    let o2: Result<&str, &str> = Ok("ok2");
+    let fn_ok = |_| Ok("ok2"); // similar to: let fn_ok = |_| -> Result<&str, &str> { Ok("ok2") };
+
+    let e1: Result<&str, &str> = Err("error1");
+    let e2: Result<&str, &str> = Err("error2");
+    let fn_err = |_| Err("error2");
+
+    assert_eq!(o1.or_else(fn_ok), o1);  // Ok1 or_else Ok2 = Ok1
+    assert_eq!(o1.or_else(fn_err), o1); // Ok or_else Err = Ok
+    assert_eq!(e1.or_else(fn_ok), o2);  // Err or_else Ok = Ok
+    assert_eq!(e1.or_else(fn_err), e2); // Err1 or_else Err2 = Err2
+}
+

and_then()

+

Similar to and(). The only difference is, the second expression should be a closure which returns same type T.

+
fn main() {
+    // and_then with Option
+    let s1 = Some("some1");
+    let s2 = Some("some2");
+    let fn_some = |_| Some("some2"); // similar to: let fn_some = |_| -> Option<&str> { Some("some2") };
+
+    let n: Option<&str> = None;
+    let fn_none = |_| None;
+
+    assert_eq!(s1.and_then(fn_some), s2); // Some1 and_then Some2 = Some2
+    assert_eq!(s1.and_then(fn_none), n);  // Some and_then None = None
+    assert_eq!(n.and_then(fn_some), n);   // None and_then Some = None
+    assert_eq!(n.and_then(fn_none), n);   // None1 and_then None2 = None1
+
+    // and_then with Result
+    let o1: Result<&str, &str> = Ok("ok1");
+    let o2: Result<&str, &str> = Ok("ok2");
+    let fn_ok = |_| Ok("ok2"); // similar to: let fn_ok = |_| -> Result<&str, &str> { Ok("ok2") };
+
+    let e1: Result<&str, &str> = Err("error1");
+    let e2: Result<&str, &str> = Err("error2");
+    let fn_err = |_| Err("error2");
+
+    assert_eq!(o1.and_then(fn_ok), o2);  // Ok1 and_then Ok2 = Ok2
+    assert_eq!(o1.and_then(fn_err), e2); // Ok and_then Err = Err
+    assert_eq!(e1.and_then(fn_ok), e1);  // Err and_then Ok = Err
+    assert_eq!(e1.and_then(fn_err), e1); // Err1 and_then Err2 = Err1
+}
+

filter()

+
+

πŸ’‘ Usually in programming languages filter functions are used with arrays or iterators to create a new array/ iterator by filtering own elements via a function/ closure. Rust also provides filter() as an iterator adaptor to apply a closure on each element of an iterator to transform it into another iterator. However in here we are talking about the functionality of filter() with Option types.

+
+

The same Some type is returned, only if we pass a Some value and the given closure returned true for it. None is returned, if None type passed or the closure returned false. The closure uses the value inside Some as an argument. Still Rust support filter() only for Option types.

+
fn main() {
+    let s1 = Some(3);
+    let s2 = Some(6);
+    let n = None;
+
+    let fn_is_even = |x: &i8| x % 2 == 0;
+
+    assert_eq!(s1.filter(fn_is_even), n);  // Some(3) -> 3 is not even -> None
+    assert_eq!(s2.filter(fn_is_even), s2); // Some(6) -> 6 is even -> Some(6)
+    assert_eq!(n.filter(fn_is_even), n);   // None -> no value -> None
+}
+

map() and map_err()

+
+

πŸ’‘ Usually in programming languages map() functions are used with arrays or iterators, to apply a closure on each element of the array or iterator. Rust also provides map() as an iterator adaptor to apply a closure on each element of an iterator to transform it into another iterator. However in here we are talking about the functionality of map() with Option and Result types.

+
+
    +
  • map() : Convert type T by applying a closure. The data type of Some or Ok blocks can be changed according to the return type of the closure. Convert Option<T> to Option<U>, Result<T, E> to Result<U, E>
  • +
+

⭐ Via map(), only Some and Ok values are getting changed. No affect to the values inside Err (None doesn’t contain any value at all).

+
fn main() {
+    let s1 = Some("abcde");
+    let s2 = Some(5);
+
+    let n1: Option<&str> = None;
+    let n2: Option<usize> = None;
+
+    let o1: Result<&str, &str> = Ok("abcde");
+    let o2: Result<usize, &str> = Ok(5);
+    
+    let e1: Result<&str, &str> = Err("abcde");
+    let e2: Result<usize, &str> = Err("abcde");
+    
+    let fn_character_count = |s: &str| s.chars().count();
+
+    assert_eq!(s1.map(fn_character_count), s2); // Some1 map = Some2
+    assert_eq!(n1.map(fn_character_count), n2); // None1 map = None2
+
+    assert_eq!(o1.map(fn_character_count), o2); // Ok1 map = Ok2
+    assert_eq!(e1.map(fn_character_count), e2); // Err1 map = Err2
+}
+
    +
  • map_err() for Result types : The data type of Err blocks can be changed according to the return type of the closure. Convert Result<T, E> to Result<T, F>.
  • +
+

⭐ Via map_err(), only Err values are getting changed. No affect to the values inside Ok.

+
fn main() {
+    let o1: Result<&str, &str> = Ok("abcde");
+    let o2: Result<&str, isize> = Ok("abcde");
+
+    let e1: Result<&str, &str> = Err("404");
+    let e2: Result<&str, isize> = Err(404);
+
+    let fn_character_count = |s: &str| -> isize { s.parse().unwrap() }; // convert str to isize
+
+    assert_eq!(o1.map_err(fn_character_count), o2); // Ok1 map = Ok2
+    assert_eq!(e1.map_err(fn_character_count), e2); // Err1 map = Err2
+}
+

map_or() and map_or_else()

+

Hope you remember the functionality of unwrap_or() and unwrap_or_else() functions. These functions also bit similar to them. But map_or() and map_or_else() apply a closure on Some and Ok values and return the value inside type T.

+
    +
  • map_or() : Support only for Option types (not supporting Result). Apply the closure to the value inside Some and return the output according to the closure. The given default value is returned for None types.
  • +
+
fn main() {
+    const V_DEFAULT: i8 = 1;
+    
+    let s = Some(10);
+    let n: Option<i8> = None;
+    let fn_closure = |v: i8| v + 2;
+
+    assert_eq!(s.map_or(V_DEFAULT, fn_closure), 12);
+    assert_eq!(n.map_or(V_DEFAULT, fn_closure), V_DEFAULT);
+}
+
    +
  • map_or_else() : Support for both Option and Result types (Result still nightly only). Similar to map_or() but should provide another closure instead a default value for the first parameter.
  • +
+

⭐ None types doesn’t contain any value. So no need to pass anything to the closure as input with Option types. But Err types contain some value inside it. So default closure should able to read it as an input, while using this with Result types.

+
#![feature(result_map_or_else)] // enable unstable library feature 'result_map_or_else' on nightly
+fn main() {
+    let s = Some(10);
+    let n: Option<i8> = None;
+
+    let fn_closure = |v: i8| v + 2;
+    let fn_default = || 1; // None doesn't contain any value. So no need to pass anything to closure as input.
+
+    assert_eq!(s.map_or_else(fn_default, fn_closure), 12);
+    assert_eq!(n.map_or_else(fn_default, fn_closure), 1);
+
+    let o = Ok(10);
+    let e = Err(5);
+    let fn_default_for_result = |v: i8| v + 1; // Err contain some value inside it. So default closure should able to read it as input
+
+    assert_eq!(o.map_or_else(fn_default_for_result, fn_closure), 12);
+    assert_eq!(e.map_or_else(fn_default_for_result, fn_closure), 6);
+}
+

ok_or() and ok_or_else()

+

As mentioned earlier, ok_or(), ok_or_else() transform Option type into Result type. Some to Ok and None to Err.

+
    +
  • ok_or() : A default Err message should pass as argument.
  • +
+
fn main() {
+    const ERR_DEFAULT: &str = "error message";
+
+    let s = Some("abcde");
+    let n: Option<&str> = None;
+
+    let o: Result<&str, &str> = Ok("abcde");
+    let e: Result<&str, &str> = Err(ERR_DEFAULT);
+
+    assert_eq!(s.ok_or(ERR_DEFAULT), o); // Some(T) -> Ok(T)
+    assert_eq!(n.ok_or(ERR_DEFAULT), e); // None -> Err(default)
+}
+
    +
  • ok_or_else() : Similar to ok_or(). A closure should be passed as the argument.
  • +
+
fn main() {
+    let s = Some("abcde");
+    let n: Option<&str> = None;
+    let fn_err_message = || "error message";
+
+    let o: Result<&str, &str> = Ok("abcde");
+    let e: Result<&str, &str> = Err("error message");
+
+    assert_eq!(s.ok_or_else(fn_err_message), o); // Some(T) -> Ok(T)
+    assert_eq!(n.ok_or_else(fn_err_message), e); // None -> Err(default)
+}
+

as_ref() and as_mut()

+

πŸ”Ž As mentioned earlier, these functions are used to borrow type T as a reference or as a mutable reference.

+
    +
  • as_ref() : Convert Option<T> to Option<&T> and Result<T, E> to Result<&T, &E>
  • +
  • as_mut() : Converts Option<T> to Option<&mut T> and Result<T, E> to Result<&mut T, &mut E>
  • +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + οΉ€ Previous + + + + Next οΉ₯ + + +
+
+ + +
+ +
+
πŸ§‘β€πŸ’»Built by and copyrightDumindu MadunuwanπŸ“… 2016-2023πŸš€ GitHub
+
+ +
+
+
+ +
+ +
+ + + \ No newline at end of file diff --git a/docs/docs/comments-and-documenting-the-code/index.html b/docs/docs/comments-and-documenting-the-code/index.html new file mode 100644 index 0000000..0dc888a --- /dev/null +++ b/docs/docs/comments-and-documenting-the-code/index.html @@ -0,0 +1,570 @@ + + + + + + + + + + + + + Comments and Documenting the code Β· Learning Rust + + + + + + + + + + + + + + +
+ + + +
+
+ +
+ +
+
+ +
+

Comments and Documenting the code

+

+
+
+

Comments

+
// Line comments
+/* Block comments */
+

Nested block comments are supported.

+

πŸ’‘ By convention, try to avoid using block comments. Use line comments instead.

+

Doc Comments

+

As we discussed, we can generate the project documentation via rustdoc by running the cargo doc command. It uses the doc comments to generate the documentation.

+

πŸ’‘ Usually we are adding doc comments on library crates. Also, we can use Markdown notations inside the doc comments.

+
/// Line comments; document the next item
+/** Block comments; document the next item */
+
+//! Line comments; document the enclosing item
+/*! Block comments; document the enclosing item !*/
+

For example,

+
/// This module contains tests; Outer comment
+mod tests {
+    
+}
+
+mod tests {
+    //! This module contains tests; Inner comment
+
+}
+
+

πŸ’­ The mod keyword is used for modules. Don’t worry about this for now; it’ll be discussed later.

+
+

Doc Attributes

+

Doc attributes are alternatives for doc comments. Especially, we use these doc attributes while we need to set controls on rustdoc. Refer the doc attributes section of rustdoc documentation for more details.

+

In the following example, each comment is equivalent to relevant doc attribute.

+
/// Outer comment
+#[doc = "Outer comment"]
+
+//! Inner comment
+#![doc = "Inner comment"]
+
+

πŸ”Ž An attribute is a general, free-form metadatum that is interpreted according to the name, convention, language and compiler version. Any item declaration may have an attribute applied to it. Syntax:

+
    +
  • Outer attribute: #[attr]
  • +
  • Inner attribute: #![attr]
  • +
+
+

πŸ‘¨β€πŸ« Before going to the next…

+
    +
  • +

    Use //! only to write crate-level documentation, nothing else. When using mod blocks, use /// outside of the block. Check the usage of //! and /// doc comments of few popular crates on crates.io. For example, check serde/src/lib.rs and rand/src/lib.rs.

    +
  • +
  • +

    Run cargo new hello_lib --lib command to create a sample crate and replace its src/lib.rs file with the following code. Then run cd hello_lib && cargo doc --open to generate the documentation and open it from your web browser.

    +
  • +
+
//! A Simple Hello World Crate
+
+/// This function returns the greeting; Hello, world!
+pub fn hello() -> String {
+	("Hello, world!").to_string()
+}
+
+#[cfg(test)]
+mod tests {
+    use super::hello;
+
+    #[test]
+    fn test_hello() {
+        assert_eq!(hello(), "Hello, world!");
+    }
+}
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + οΉ€ Previous + + + + Next οΉ₯ + + +
+
+ + +
+ +
+
πŸ§‘β€πŸ’»Built by and copyrightDumindu MadunuwanπŸ“… 2016-2023πŸš€ GitHub
+
+ +
+
+
+ +
+ +
+ + + \ No newline at end of file diff --git a/docs/docs/control-flows/index.html b/docs/docs/control-flows/index.html new file mode 100644 index 0000000..ad6357c --- /dev/null +++ b/docs/docs/control-flows/index.html @@ -0,0 +1,756 @@ + + + + + + + + + + + + + Control Flows Β· Learning Rust + + + + + + + + + + + + + + +
+ + + +
+
+ +
+ +
+
+ +
+

Control Flows

+

+
+
+

if - else if - else

+
    +
  • Using only if block.
  • +
+
let age = 13;
+
+if age < 18 {
+    println!("Hello, child!"); // The code prints this
+}
+
    +
  • Using only if and else blocks.
  • +
+
let i = 7;
+
+if i % 2 == 0 {
+    println!("Even");
+} else {
+    println!("Odd"); // The code prints this
+}
+
    +
  • Using with let statement.
  • +
+
let age: u8 = 13;
+let is_below_eighteen = if age < 18 { true } else { false }; // true
+
    +
  • More examples,
  • +
+
// i. A simple example
+let team_size = 7;
+
+if team_size < 5 {
+    println!("Small");
+} else if team_size < 10 {
+    println!("Medium"); // The code prints this
+} else {
+    println!("Large");
+}
+
// ii. Let's refactor above code
+let team_size = 7;
+let team_size_in_text;
+
+if team_size < 5 {
+    team_size_in_text = "Small";
+} else if team_size < 10 {
+    team_size_in_text = "Medium";
+} else {
+    team_size_in_text = "Large";
+}
+
+println!("Current team size : {}", team_size_in_text); // Current team size : Medium
+
// iii. Let's refactor further
+let team_size = 7;
+let team_size = if team_size < 5 {
+    "Small" // ⭐️ no ;
+} else if team_size < 10 {
+    "Medium"
+} else {
+    "Large"
+};
+
+println!("Current team size : {}", team_size); // Current team size : Medium
+

⭐️ Return data type should be the same on each block when using this as an expression.

+

match

+
let tshirt_width = 20;
+let tshirt_size = match tshirt_width {
+    16 => "S", // check 16
+    17 | 18 => "M", // check 17 and 18
+    19 ..= 21 => "L", // check from 19 to 21 (19,20,21)
+    22 => "XL",
+    _ => "Not Available",
+};
+
+println!("{}", tshirt_size); // L
+
let is_allowed = false;
+let list_type = match is_allowed {
+    true => "Full",
+    false => "Restricted"
+    // no default/ _ condition can be skipped
+    // Because data type of is_allowed is boolean and all possibilities checked on conditions
+};
+
+println!("{}", list_type); // Restricted
+
let marks_paper_a: u8 = 25;
+let marks_paper_b: u8 = 30;
+
+let output = match (marks_paper_a, marks_paper_b) {
+    (50, 50) => "Full marks for both papers",
+    (50, _) => "Full marks for paper A",
+    (_, 50) => "Full marks for paper B",
+    (x, y) if x > 25 && y > 25 => "Good",
+    (_, _) => "Work hard"
+};
+
+println!("{}", output); // Work hard
+

loop

+
loop {
+	println!("Loop forever!");
+}
+
// Usage of break and continue
+let mut a = 0;
+
+loop {
+	if a == 0 {
+		println!("Skip Value : {}", a);
+		a += 1;
+		continue;
+	} else if a == 2 {
+		println!("Break At : {}", a);
+		break;
+	}
+
+	println!("Current Value : {}", a);
+	a += 1;
+}
+
// Outer break
+let mut b1 = 1;
+
+'outer_loop: loop { //set label outer_loop
+  let mut b2 = 1;
+
+  'inner_loop: loop {
+    println!("Current Value : [{}][{}]", b1, b2);
+
+    if b1 == 2 && b2 == 2 {
+        break 'outer_loop; // kill outer_loop
+    } else if b2 == 5 {
+    	break;
+    }
+
+    b2 += 1;
+  }
+
+  b1 += 1;
+}
+

while

+
let mut a = 1;
+
+while a <= 10 {
+	println!("Current value : {}", a);
+	a += 1; //no ++ or -- on Rust
+}
+
// Usage of break and continue
+let mut b = 0;
+
+while b < 5 {
+	if b == 0 {
+		println!("Skip value : {}", b);
+		b += 1;
+		continue;
+	} else if b == 2 {
+		println!("Break At : {}", b);
+		break;
+	}
+
+	println!("Current value : {}", b);
+	b += 1;
+}
+
// Outer break
+let mut c1 = 1;
+
+'outer_while: while c1 < 6 { //set label outer_while
+	let mut c2 = 1;
+
+	'inner_while: while c2 < 6 {
+		println!("Current Value : [{}][{}]", c1, c2);
+		if c1 == 2 && c2 == 2 { break 'outer_while; } //kill outer_while
+		c2 += 1;
+	}
+
+	c1 += 1;
+}
+

for

+
// 0 to 10 (10 exclusive); In other languages, `for(i = 0; i < 10; i++)`
+for i in 0..10 {
+  println!("Current value : {}", i);
+}
+
// 1 to 10 (10 inclusive); In other languages, `for(i = 1; i <= 10; i++)`
+for i in 1..=10 {
+  println!("Current value : {}", i);
+}
+
// Usage of break and continue
+for b in 0..6 {
+  if b == 0 {
+    println!("Skip Value : {}", b);
+    continue;
+  } else if b == 2 {
+    println!("Break At : {}", b);
+    break;
+  }
+
+  println!("Current value : {}", b);
+}
+
// Outer break
+'outer_for: for c1 in 1..6 { //set label outer_for
+
+  'inner_for: for c2 in 1..6 {
+    println!("Current Value : [{}][{}]", c1, c2);
+    if c1 == 2 && c2 == 2 { break 'outer_for; } //kill outer_for
+  }
+
+}
+
// Working with arrays/vectors
+let group : [&str; 4] = ["Mark", "Larry", "Bill", "Steve"];
+
+for n in 0..group.len() { // group.len() = 4 -> 0..4 πŸ‘Ž check group.len()on each iteration
+  println!("Current Person : {}", group[n]);
+}
+
+for person in group.iter() { // πŸ‘ group.iter() turn the array into a simple iterator
+  println!("Current Person : {}", person);
+}
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + οΉ€ Previous + + + + Next οΉ₯ + + +
+
+ + +
+ +
+
πŸ§‘β€πŸ’»Built by and copyrightDumindu MadunuwanπŸ“… 2016-2023πŸš€ GitHub
+
+ +
+
+
+ +
+ +
+ + + \ No newline at end of file diff --git a/docs/docs/crates/index.html b/docs/docs/crates/index.html new file mode 100644 index 0000000..b7efed7 --- /dev/null +++ b/docs/docs/crates/index.html @@ -0,0 +1,886 @@ + + + + + + + + + + + + + Crates Β· Learning Rust + + + + + + + + + + + + + + +
+ + + +
+
+ +
+ +
+
+ +
+

Crates

+

+
+
+

πŸ’­ Crates are a bit similar to the packages in some other languages. Crates compile individually. If the crate has child file modules, those files will get merged with the crate file and compile as a single unit.

+

πŸ’­ A crate can produce an executable/ a binary or a library. src/main.rs is the crate root/ entry point for a binary crate and src/lib.rs is the entry point for a library crate.

+

01. lib.rs on executable crate

+

πŸ’‘ When writing binary crates, we can move the main functionalities to src/lib.rs and use it as a library from src/main.rs. This pattern is quite common on executable crates.

+
// # Think we run,
+cargo new greetings
+touch greetings/src/lib.rs
+
+// # It generates,
+greetings
+ β”œβ”€β”€ Cargo.toml
+ └── src
+    β”œβ”€β”€ lib.rs
+    └── main.rs
+
+// # Think we modify following files,
+
+// 01. greetings/src/lib.rs
+pub fn hello() {
+    println!("Hello, world!");
+}
+
+// 02. greetings/src/main.rs
+extern crate greetings;
+
+fn main() {
+    greetings::hello();
+}
+
+

πŸ’― As I mentioned earlier, in here we use simplest examples to reduce the complexity of learning materials. But this is how we need to write greetings/src/lib.rs to make the code more testable.

+
+
// greetings/src/lib.rs
+pub fn hello() -> String {
+  //! This returns `Hello, world!` String
+  ("Hello, world!").to_string()
+}
+
+// 01. Tests for `hello()`
+#[test] // Indicates that this is a test function
+fn test_hello() {
+  assert_eq!(hello(), "Hello, world!");
+}
+
+// 02. Tests for `hello()`, Idiomatic way
+#[cfg(test)] // Only compiles when running tests
+mod tests { // Separates tests from code
+  use super::hello; // Import root `hello()` function
+  
+    #[test]
+    fn test_hello() {
+        assert_eq!(hello(), "Hello, world!");
+    }
+}
+
+

πŸ“– When importing a crate that has dashes in its name β€œlike-this”, which is not a valid Rust identifier, it will be converted by changing the dashes to underscores, so you would write extern crate like_this;

+
+

lib.rs can link with multiple files.

+
// # Think we run,
+cargo new phrases
+touch phrases/src/lib.rs
+touch phrases/src/greetings.rs
+
+// # It generates,
+phrases
+ β”œβ”€β”€ Cargo.toml
+ └── src
+    β”œβ”€β”€ greetings.rs
+    β”œβ”€β”€ lib.rs
+    └── main.rs
+   
+// # Think we modify following files,
+
+// 01. phrases/src/greetings.rs
+pub fn hello() {
+    println!("Hello, world!");
+}
+
+// 02. phrases/src/main.rs
+extern crate phrases;
+
+fn main() {
+    phrases::greetings::hello();
+}
+
+// 03. phrases/src/lib.rs
+pub mod greetings; // ⭐️ Import `greetings` module as a public module
+

02. Dependency crate on Cargo.toml

+

When the code in the lib.rs file is getting larger, we can move those into a separate library crate and use it as a dependency of the main crate. As we mentioned earlier, a dependency can be specified from a folder path, git repository or by crates.io.

+

a. Using folder path

+

Let’s see how to create a nested crate and use it as a dependency using folder path,

+
// # Think we run,
+cargo new phrases
+cargo new phrases/greetings --lib
+
+// # It generates,
+phrases
+ β”œβ”€β”€ Cargo.toml
+ β”œβ”€β”€ greetings
+ β”‚  β”œβ”€β”€ Cargo.toml
+ β”‚  └── src
+ β”‚     └── lib.rs
+ └── src
+    └── main.rs
+
+// # Think we modify following files,
+
+// 01. phrases/Cargo.toml
+[package]
+name = "phrases"
+version = "0.1.0"
+authors = ["Dumindu Madunuwan"]
+
+[dependencies]
+greetings = { path = "greetings" }
+
+// 02. phrases/greetings/src/lib.rs
+pub fn hello() {
+    println!("Hello, world!");
+}
+
+// 03. phrases/src/main.rs
+extern crate greetings;
+
+fn main() {
+    greetings::hello();
+}
+

b. Using git repository

+

If you want to use a library crate on multiple projects, one way is moving crate code to a git repository and use it as a dependency when needed.

+
// -- Cargo.toml --
+[dependencies]
+
+// 01. Get the latest commit on the master branch
+rocket = { git = "https://github.com/SergioBenitez/Rocket" }
+
+// 02. Get the latest commit of a specific branch
+rocket = { git = "https://github.com/SergioBenitez/Rocket", branch = "v0.3" }
+
+// 03. Get a specific tag
+rocket = { git = "https://github.com/SergioBenitez/Rocket", tag = "v0.3.2" }
+
+// 04. Get a specific revision (on master or any branch, according to rev)
+rocket = { git = "https://github.com/SergioBenitez/Rocket", rev = "8183f636305cef4adaa9525506c33cbea72d1745" }
+

c. Using crates.io

+

The other way is uploading it to crates.io and use it as a dependency when needed.

+

🚧 First, let’s create a simple β€œHello world” crate and upload it to crates.io.

+
// # Think we run,
+cargo new test_crate_hello_world --lib
+
+// # It generates,
+test_crate_hello_world
+ β”œβ”€β”€ Cargo.toml
+ └── src
+    └── lib.rs
+   
+// # Think we modify following files,
+
+// 01. test_crate_hello_world/Cargo.toml
+[package]
+name = "test_crate_hello_world"
+version = "0.1.0"
+authors = ["Dumindu Madunuwan"]
+
+description = "A Simple Hello World Crate"
+repository = "https://github.com/dumindu/test_crate_hello_world"
+keywords = ["hello", "world"]
+license = "Apache-2.0"
+
+[dependencies]
+
+// 02. test_crate_hello_world/src/lib.rs
+//! A Simple Hello World Crate
+
+/// This function returns the greeting; `Hello, world!`
+pub fn hello() -> String {
+    ("Hello, world!").to_string()
+}
+
+#[cfg(test)]
+mod tests {
+
+    use super::hello;
+    
+    #[test]
+    fn test_hello() {
+        assert_eq!(hello(), "Hello, world!");
+    }
+}
+
+

πŸ’­ //! doc comments are used to write crate and module-level documentation. On other places, we have to use /// outside of the block. And when uploading a crate to crates.io, cargo generates the documentation from these doc comments and host it on docs.rs.

+
+

πŸ’‘ We have to add the description and license fields to Cargo.toml. Otherwise, we will get error: api errors: missing or empty metadata fields: description, license. Please see http://doc.crates.io/manifest.html

+

To upload this to crates.io,

+
    +
  1. We have to create an account on crates.io to acquire an API token
  2. +
  3. Then run cargo login <token> with that API token and cargo publish
  4. +
+

πŸ“– This is how it describes on Cargo Docs with more details.

+
+
    +
  • You’ll need an account on crates.io to acquire an API token. To do so, visit the home page and log in via a GitHub account (required for now). After this, visit your Account Settings page and run the cargo login command specified. +Ex. cargo login abcdefghijklmnopqrstuvwxyz012345
  • +
+
+
    +
  • The next step is to package up your crate into a format that can be uploaded to crates.io. For this we’ll use the cargo package sub-command.
  • +
  • Now, it can be uploaded to crates.io with the cargo publish command.
  • +
  • If you’d like to skip the cargo package step, the cargo publish sub-command will automatically package up the local crate if a copy isn’t found already.
  • +
+

The name of our crate is test_crate_hello_world. So it can be found on, +πŸ“¦ https://crates.io/crates/test_crate_hello_world +πŸ“‘ https://docs.rs/test_crate_hello_world

+
+

πŸ’― crates.io supports readme files as well. To enable it, we have to add the readme field to Cargo.toml. Ex: readme="README.md"

+
+

πŸ—οΈ Okay then, Let’s see how we can use this from another crate.

+
// # Think we run,
+cargo new greetings
+
+// # It generates,
+greetings
+ β”œβ”€β”€ Cargo.toml
+ └── src
+    └── main.rs
+
+// # Think we modify following files,
+
+// 01. greetings/Cargo.toml
+[package]
+name = "greetings"
+version = "0.1.0"
+authors = ["Dumindu Madunuwan"]
+
+[dependencies]
+test_crate_hello_world = "0.1.0"
+
+// 02. greetings/src/main.rs
+extern crate test_crate_hello_world;
+
+fn main() {
+    println!("{}", test_crate_hello_world::hello());
+}
+

By default, Cargo looks dependencies on crates.io. So we have to add only the crate name and a version string to Cargo.toml and then run cargo build to fetch the dependencies and compile them.

+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + οΉ€ Previous + + + + Next οΉ₯ + + +
+
+ + +
+ +
+
πŸ§‘β€πŸ’»Built by and copyrightDumindu MadunuwanπŸ“… 2016-2023πŸš€ GitHub
+
+ +
+
+
+ +
+ +
+ + + \ No newline at end of file diff --git a/docs/docs/custom-error-types/index.html b/docs/docs/custom-error-types/index.html new file mode 100644 index 0000000..52ed616 --- /dev/null +++ b/docs/docs/custom-error-types/index.html @@ -0,0 +1,979 @@ + + + + + + + + + + + + + Custom Error Types Β· Learning Rust + + + + + + + + + + + + + + +
+ + + +
+
+ +
+ +
+
+ +
+

Custom Error Types

+

+
+
+

Rust allow us to create our own Err types. We call them β€œCustom Error Types”.

+

Error trait

+

As you know traits define the functionality a type must provide. But we don’t always need to define new traits for common functionalities, because Rust standard library provides reusable traits which can be implemented on our own types. While creating custom error types the std::error::Error trait helps us to convert any type to an Err type.

+
use std::fmt::{Debug, Display};
+
+pub trait Error: Debug + Display {
+    fn source(&self) -> Option<&(Error + 'static)> { ... }
+}
+
+

As we discussed under traits inheritance, a trait can be inherited from another traits. trait Error: Debug + Display means Error trait inherits from fmt::Debug and fmt::Display traits.

+
+
// traits inside Rust standard library core fmt module/ std::fmt
+pub trait Display {
+    fn fmt(&self, f: &mut Formatter) -> Result<(), Error>;
+}
+
+pub trait Debug {
+    fn fmt(&self, f: &mut Formatter) -> Result<(), Error>;
+}
+
    +
  • +

    Display

    +
      +
    • How should the end user see this error as a message/ user-facing output.
    • +
    • Usually print via println!("{}") or eprintln!("{}")
    • +
    +
  • +
  • +

    Debug

    +
      +
    • How should display the Err while debugging/ programmer-facing output.
    • +
    • Usually print via println!("{:?}") or eprintln!("{:?}")
    • +
    • To pretty-print, println!("{:#?}") or eprintln!("{:#?}") can be used.
    • +
    +
  • +
  • +

    source()

    +
      +
    • The lower-level source of this error, if any.
    • +
    • Optional.
    • +
    +
  • +
+

First, let’s see how to implement std::error::Error trait on a simplest custom error type.

+
use std::fmt;
+
+// Custom error type; can be any type which defined in the current crate
+// πŸ’‘ In here, we use a simple "unit struct" to simplify the example
+struct AppError;
+
+// Implement std::fmt::Display for AppError
+impl fmt::Display for AppError {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        write!(f, "An Error Occurred, Please Try Again!") // user-facing output
+    }
+}
+
+// Implement std::fmt::Debug for AppError
+impl fmt::Debug for AppError {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        write!(f, "{{ file: {}, line: {} }}", file!(), line!()) // programmer-facing output
+    }
+}
+
+// A sample function to produce an AppError Err
+fn produce_error() -> Result<(), AppError> {
+    Err(AppError)
+}
+
+fn main() {
+    match produce_error() {
+        Err(e) => eprintln!("{}", e), // An Error Occurred, Please Try Again!
+        _ => println!("No error"),
+    }
+
+    eprintln!("{:?}", produce_error()); // Err({ file: src/main.rs, line: 17 })
+}
+

Hope you understood the main points. Now, let’s see a custom error type with an error code and an error message.

+
use std::fmt;
+
+struct AppError {
+    code: usize,
+    message: String,
+}
+
+// Different error messages according to AppError.code
+impl fmt::Display for AppError {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        let err_msg = match self.code {
+            404 => "Sorry, Can not find the Page!",
+            _ => "Sorry, something is wrong! Please Try Again!",
+        };
+
+        write!(f, "{}", err_msg)
+    }
+}
+
+// A unique format for dubugging output
+impl fmt::Debug for AppError {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        write!(
+            f,
+            "AppError {{ code: {}, message: {} }}",
+            self.code, self.message
+        )
+    }
+}
+
+fn produce_error() -> Result<(), AppError> {
+    Err(AppError {
+        code: 404,
+        message: String::from("Page not found"),
+    })
+}
+
+fn main() {
+    match produce_error() {
+        Err(e) => eprintln!("{}", e), // Sorry, Can not find the Page!
+        _ => println!("No error"),
+    }
+
+    eprintln!("{:?}", produce_error()); // Err(AppError { code: 404, message: Page not found })
+
+    eprintln!("{:#?}", produce_error());
+    // Err(
+    //     AppError { code: 404, message: Page not found }
+    // )
+}
+

⭐️ Rust standard library provides not only reusable traits and also it facilitates to magically generate implementations for few traits via #[derive] attribute. Rust support derive std::fmt::Debug, to provide a default format for debug messages. So we can skip std::fmt::Debug implementation for custom error types and use #[derive(Debug)] before struct declaration.

+
+

For a struct #[derive(Debug)] prints, the name of the struct , { , comma-separated list of each field’s name and debug value and }.

+
+
use std::fmt;
+
+#[derive(Debug)] // derive std::fmt::Debug on AppError
+struct AppError {
+    code: usize,
+    message: String,
+}
+
+impl fmt::Display for AppError {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        let err_msg = match self.code {
+            404 => "Sorry, Can not find the Page!",
+            _ => "Sorry, something is wrong! Please Try Again!",
+        };
+
+        write!(f, "{}", err_msg)
+    }
+}
+
+fn produce_error() -> Result<(), AppError> {
+    Err(AppError {
+        code: 404,
+        message: String::from("Page not found"),
+    })
+}
+
+fn main() {
+    match produce_error() {
+        Err(e) => eprintln!("{}", e), // Sorry, Can not find the Page!
+        _ => println!("No error"),
+    }
+
+    eprintln!("{:?}", produce_error()); // Err(AppError { code: 404, message: Page not found })
+
+    eprintln!("{:#?}", produce_error());
+    // Err(
+    //     AppError {
+    //         code: 404,
+    //         message: "Page not found"
+    //     }
+    // )
+}
+

From trait

+

When writing real programs, we mostly have to deal with different modules, different std and third party crates at the same time. Each crate uses their own error types. However, if we are using our own error type, we should convert those errors into our error type. For these conversions, we can use the standardized trait std::convert::From.

+
// traits inside Rust standard library core convert module/ std::convert
+pub trait From<T>: Sized {
+  fn from(_: T) -> Self;
+}
+
+

πŸ’‘ As you know, String::from() function is used to create a String from &str data type. Actually this also an implementation of std::convert::From trait.

+
+

Let’s see how to implement std::convert::From trait on a custom error type.

+
use std::fs::File;
+use std::io;
+
+#[derive(Debug)]
+struct AppError {
+    kind: String,    // type of the error
+    message: String, // error message
+}
+
+// Implement std::convert::From for AppError; from io::Error
+impl From<io::Error> for AppError {
+    fn from(error: io::Error) -> Self {
+        AppError {
+            kind: String::from("io"),
+            message: error.to_string(),
+        }
+    }
+}
+
+fn main() -> Result<(), AppError> {
+    let _file = File::open("nonexistent_file.txt")?; // This generates an io::Error. But because of return type is Result<(), AppError>, it converts to AppError
+
+    Ok(())
+}
+
+
+// --------------- Run time error ---------------
+Error: AppError { kind: "io", message: "No such file or directory (os error 2)" }
+

In the above example, File::open(β€œnonexistent.txt”)? produces std::io::Error. But because of the return type is Result<(), AppError>, it converts to an AppError. Because of we are propagating the error from main() function, it prints the Debug representation of the Err.

+

In the above example we deal with only one std error type, std::io::Error. Let’s see some example which handles multiple std error types.

+
use std::fs::File;
+use std::io::{self, Read};
+use std::num;
+
+#[derive(Debug)]
+struct AppError {
+    kind: String,
+    message: String,
+}
+
+// Implement std::convert::From for AppError; from io::Error
+impl From<io::Error> for AppError {
+    fn from(error: io::Error) -> Self {
+        AppError {
+            kind: String::from("io"),
+            message: error.to_string(),
+        }
+    }
+}
+
+// Implement std::convert::From for AppError; from num::ParseIntError
+impl From<num::ParseIntError> for AppError {
+    fn from(error: num::ParseIntError) -> Self {
+        AppError {
+            kind: String::from("parse"),
+            message: error.to_string(),
+        }
+    }
+}
+
+fn main() -> Result<(), AppError> {
+    let mut file = File::open("hello_world.txt")?; // generates an io::Error, if can not open the file and converts to an AppError
+
+    let mut content = String::new();
+    file.read_to_string(&mut content)?; // generates an io::Error, if can not read file content and converts to an AppError
+
+    let _number: usize;
+    _number = content.parse()?; // generates num::ParseIntError, if can not convert file content to usize and converts to an AppError
+
+    Ok(())
+}
+
+
+// --------------- Few possible run time errors ---------------
+
+// 01. If hello_world.txt is a nonexistent file
+Error: AppError { kind: "io", message: "No such file or directory (os error 2)" }
+
+// 02. If user doesn't have relevant permission to access hello_world.txt
+Error: AppError { kind: "io", message: "Permission denied (os error 13)" }
+
+// 03. If hello_world.txt contains non-numeric content. ex Hello, world!
+Error: AppError { kind: "parse", message: "invalid digit found in string" }
+
+

πŸ”Ž Search about the implementation of std::io::ErrorKind, to see how to organize error types further.

+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + οΉ€ Previous + + + + + + +
+
+ + +
+ +
+
πŸ§‘β€πŸ’»Built by and copyrightDumindu MadunuwanπŸ“… 2016-2023πŸš€ GitHub
+
+ +
+
+
+ +
+ +
+ + + \ No newline at end of file diff --git a/docs/docs/enums/index.html b/docs/docs/enums/index.html new file mode 100644 index 0000000..a5510b9 --- /dev/null +++ b/docs/docs/enums/index.html @@ -0,0 +1,609 @@ + + + + + + + + + + + + + Enums Β· Learning Rust + + + + + + + + + + + + + + +
+ + + +
+
+ +
+ +
+
+ +
+

Enums

+

+
+
+

⭐️ An enum is a single type. It contains variants, which are possible values of the enum at a given time. For example,

+
enum Day {
+    Sunday,
+    Monday,
+    Tuesday,
+    Wednesday,
+    Thursday,
+    Friday,
+    Saturday
+}
+
+// The `Day` is the enum
+// Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday are the variants
+

⭐️ Variants can be accessed through :: notation, ex. Day::Sunday

+

⭐️ Each enum variant can have,

+
    +
  • No data (unit variant)
  • +
  • Unnamed ordered data (tuple variant)
  • +
  • Named data (struct variant)
  • +
+
enum FlashMessage {
+  Success, // A unit variant
+  Warning{ category: i32, message: String }, // A struct variant
+  Error(String) // A tuple variant
+}
+
+fn main() {
+  let mut form_status = FlashMessage::Success;
+  print_flash_message(form_status);
+
+  form_status = FlashMessage::Warning {category: 2, message: String::from("Field X is required")};
+  print_flash_message(form_status);
+
+  form_status = FlashMessage::Error(String::from("Connection Error"));
+  print_flash_message(form_status);
+}
+
+fn print_flash_message(m : FlashMessage) {
+  // Pattern matching with enum
+  match m {
+    FlashMessage::Success =>
+      println!("Form Submitted correctly"),
+    FlashMessage::Warning {category, message} => // Destructure, should use same field names
+      println!("Warning : {} - {}", category, message),
+    FlashMessage::Error(msg) =>
+      println!("Error : {}", msg)
+  }
+}
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + οΉ€ Previous + + + + Next οΉ₯ + + +
+
+ + +
+ +
+
πŸ§‘β€πŸ’»Built by and copyrightDumindu MadunuwanπŸ“… 2016-2023πŸš€ GitHub
+
+ +
+
+
+ +
+ +
+ + + \ No newline at end of file diff --git a/docs/docs/error-and-none-propagation/index.html b/docs/docs/error-and-none-propagation/index.html new file mode 100644 index 0000000..913b020 --- /dev/null +++ b/docs/docs/error-and-none-propagation/index.html @@ -0,0 +1,794 @@ + + + + + + + + + + + + + Error and None Propagation Β· Learning Rust + + + + + + + + + + + + + + +
+ + + +
+
+ +
+ +
+
+ +
+

Error and None Propagation

+

+
+
+

We should use panics like panic!(), unwrap(), expect() only if we can not handle the situation in a better way. Also if a function contains expressions which can produce either None or Err,

+
    +
  • we can handle them inside the same function. Or,
  • +
  • we can return None and Err types immediately to the caller. So the caller can decide how to handle them.
  • +
+

πŸ’‘ None types no need to handle by the caller of the function always. But Rusts’ convention to handle Err types is, return them immediately to the caller to give more control to the caller to decide how to handle them.

+

? Operator

+
    +
  • If an Option type has Some value or a Result type has a Ok value, the value inside them passes to the next step.
  • +
  • If the Option type has None value or the Result type has Err value, return them immediately to the caller of the function.
  • +
+

Example with Option type,

+
fn main() {
+    if complex_function().is_none() {
+        println!("X not exists!");
+    }
+}
+
+fn complex_function() -> Option<&'static str> {
+    let x = get_an_optional_value()?; // if None, returns immediately; if Some("abc"), set x to "abc"
+
+    // some other code, ex
+    println!("{}", x); // "abc" ; if you change line 19 `false` to `true` 
+
+    Some("")
+}
+
+fn get_an_optional_value() -> Option<&'static str> {
+
+    //if the optional value is not empty
+    if false {
+        return Some("abc");
+    }
+    
+    //else
+    None
+}
+

Example with Result Type,

+
fn main() {
+    // `main` function is the caller of `complex_function` function
+    // So we handle errors of complex_function(), inside main()
+    if complex_function().is_err() {
+        println!("Can not calculate X!");
+    }
+}
+
+fn complex_function() -> Result<u64, String> {
+    let x = function_with_error()?; // if Err, returns immediately; if Ok(255), set x to 255
+
+    // some other code, ex
+    println!("{}", x); // 255 ; if you change line 20 `true` to `false`
+
+    Ok(0)
+}
+
+fn function_with_error() -> Result<u64, String> {
+    //if error happens
+    if true {
+        return Err("some message".to_string());
+    }
+
+    // else, return valid output
+    Ok(255)
+}
+

try!()

+

⭐ ? operator was added in Rust version 1.13. try!() macro is the old way to propagate errors before that. So we should avoid using this now.

+
    +
  • If a Result type has Ok value, the value inside it passes to the next step. If it has Err value, returns it immediately to the caller of the function.
  • +
+
// using `?`
+let x = function_with_error()?; // if Err, returns immediately; if Ok(255), set x to 255
+
+// using `try!()`
+let x = try!(function_with_error());
+

Error propagation fromΒ main()

+

Before Rust version 1.26, we couldn’t propagate Result and Option types from the main() function. But now, we can propagate Result types from the main() function and it prints the Debug representation of the Err.

+

πŸ’‘ We are going to discuss about Debug representations under Error trait section.

+
use std::fs::File;
+
+fn main() -> std::io::Result<()> {
+    let _ = File::open("not-existing-file.txt")?;
+
+    Ok(()) // Because of the default return value of Rust functions is an empty tuple/ ()
+}
+
+// Because of the program can not find not-existing-file.txt , it produces,
+//    Err(Os { code: 2, kind: NotFound, message: "No such file or directory" })
+// While propagating error, the program prints,
+//    Error: Os { code: 2, kind: NotFound, message: "No such file or directory" }
+
+

πŸ’― If you want to know about the all kind of errors std::fs::File::open() can produce, check the error list on std::fs::OpenOptions.

+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + οΉ€ Previous + + + + Next οΉ₯ + + +
+
+ + +
+ +
+
πŸ§‘β€πŸ’»Built by and copyrightDumindu MadunuwanπŸ“… 2016-2023πŸš€ GitHub
+
+ +
+
+
+ +
+ +
+ + + \ No newline at end of file diff --git a/docs/docs/functions-02/index.html b/docs/docs/functions-02/index.html new file mode 100644 index 0000000..fdc807e --- /dev/null +++ b/docs/docs/functions-02/index.html @@ -0,0 +1,649 @@ + + + + + + + + + + + + + Functions (02) Β· Learning Rust + + + + + + + + + + + + + + +
+ + + +
+
+ +
+ +
+
+ +
+

Functions (02)

+

+
+
+

Functions are the first line of organization in any program.

+
fn main() {
+  greet(); // Do one thing
+  ask_location(); // Do another thing
+}
+
+fn greet() {
+  println!("Hello!");
+}
+
+fn ask_location() {
+  println!("Where are you from?");
+}
+

We can add unit tests in the same file.

+
fn main() {
+    greet();
+}
+
+fn greet() -> String {
+    "Hello, world!".to_string()
+}
+
+#[test] // Test attribute indicates this is a test function
+fn test_greet() {
+    assert_eq!("Hello, world!", greet())
+}
+
+// πŸ’‘ Always put test functions inside a tests module with #[cfg(test)] attribute. 
+// cfg(test) module compiles only when running tests. We discuss more about this in the next section.
+
+

πŸ’­ An attribute is a general, free-form metadatum that is interpreted according to name, convention, and language and compiler version.

+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + οΉ€ Previous + + + + Next οΉ₯ + + +
+
+ + +
+ +
+
πŸ§‘β€πŸ’»Built by and copyrightDumindu MadunuwanπŸ“… 2016-2023πŸš€ GitHub
+
+ +
+
+
+ +
+ +
+ + + \ No newline at end of file diff --git a/docs/docs/functions/index.html b/docs/docs/functions/index.html new file mode 100644 index 0000000..9257219 --- /dev/null +++ b/docs/docs/functions/index.html @@ -0,0 +1,613 @@ + + + + + + + + + + + + + Functions Β· Learning Rust + + + + + + + + + + + + + + +
+ + + +
+
+ +
+ +
+
+ +
+

Functions

+

+
+
+

Named functions

+
    +
  • Named functions are declared with the keyword fn
  • +
  • When using arguments, you must declare the data types.
  • +
  • By default, functions return an empty tuple/ (). If you want to return a value, the return type must be specified after ->
  • +
+

i. Hello world

+
fn main() {
+    println!("Hello, world!");
+}
+

ii. Passing arguments

+
fn print_sum(a: i8, b: i8) {
+    println!("sum is: {}", a + b);
+}
+

iii. Returning values

+
// 01. Without the return keyword. Only the last expression returns.
+fn plus_one(a: i32) -> i32 {
+    a + 1
+    // There is no ending ; in the above line.
+    // It means this is an expression which equals to `return a + 1;`.
+}
+
// 02. With the return keyword.
+fn plus_two(a: i32) -> i32 {
+    return a + 2;
+    // Should use return keyword only on conditional/ early returns.
+    // Using return keyword in the last expression is a bad practice.
+}
+

iv. Function pointers, Usage as a Data Type

+
fn main() {
+    // 01. Without type declarations.
+    let p1 = plus_one;
+    let x = p1(5); // 6
+
+    // 02. With type declarations.
+    let p1: fn(i32) -> i32 = plus_one;
+    let x = p1(5); // 6
+}
+
+fn plus_one(a: i32) -> i32 {
+    a + 1
+}
+

Closures

+
    +
  • Also known as anonymous functions or lambda functions.
  • +
  • The data types of arguments and returns are optional ⃰ⁱᡛ.
  • +
+

Example with a named function, before using closures.

+
fn main() {
+  let x = 2;
+  println!("{}", get_square_value(x));
+}
+
+fn get_square_value(i: i32) -> i32 {
+    i * i
+}
+

i. With optional type declarations of input and return types

+
fn main() {
+    let x = 2;
+    let square = |i: i32| -> i32 { // Input parameters are passed inside | | and expression body is wrapped within { }
+        i * i
+    };
+    println!("{}", square(x));
+}
+

ii. Without type declarations of input and return types

+
fn main() {
+    let x = 2;
+    let square = |i| i * i; // { } are optional for single-lined closures
+    println!("{}", square(x));
+}
+

iii. With optional type declarations; Creating and calling together

+
fn main() {
+    let x = 2;
+    let x_square = |i: i32| -> i32 { i * i }(x); // { } are mandatory while creating and calling same time.
+    println!("{}", x_square);
+}
+

iv. Without optional type declarations; Creating and calling together

+
fn main() {
+    let x = 2;
+    let x_square = |i| -> i32 { i * i }(x); // ⭐️ The return type is mandatory.
+    println!("{}", x_square);
+}
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + οΉ€ Previous + + + + Next οΉ₯ + + +
+
+ + +
+ +
+
πŸ§‘β€πŸ’»Built by and copyrightDumindu MadunuwanπŸ“… 2016-2023πŸš€ GitHub
+
+ +
+
+
+ +
+ +
+ + + \ No newline at end of file diff --git a/docs/docs/generics/index.html b/docs/docs/generics/index.html new file mode 100644 index 0000000..53fbca7 --- /dev/null +++ b/docs/docs/generics/index.html @@ -0,0 +1,689 @@ + + + + + + + + + + + + + Generics Β· Learning Rust + + + + + + + + + + + + + + +
+ + + +
+
+ +
+ +
+
+ +
+

Generics

+

+
+
+
+

πŸ“– Sometimes, when writing a function or data type, we may want it to work for multiple types of arguments. In Rust, we can do this with generics.

+
+

πŸ’­ The concept is, instead of declaring a specific data type we use an uppercase letter(or PascalCase identifier). ex, instead of xΒ : u8 we use xΒ : TΒ . but we have to inform to the compiler that T is a generic type(can be any type) by adding <T> at first.

+

Generalizing functions

+
fn takes_anything<T>(x: T) { // x has type T, T is a generic type
+}
+
+fn takes_two_of_the_same_things<T>(x: T, y: T) { // Both x and y has the same type
+}
+
+fn takes_two_things<T, U>(x: T, y: U) { // Multiple types
+}
+

Generalizing structs

+
struct Point<T> {
+  x: T,
+  y: T,
+}
+
+fn main() {
+  let point_a = Point { x: 0, y: 0 }; // T is a int type
+  let point_b = Point { x: 0.0, y: 0.0 }; // T is a float type
+}
+
+// πŸ”Ž When adding an implementation for a generic struct, the type parameters should be declared after the impl as well
+//   impl<T> Point<T> {
+

Generalizing enums

+
enum Option<T> {
+    Some(T),
+    None,
+}
+
+enum Result<T, E> {
+    Ok(T),
+    Err(E),
+}
+
+

⭐️ Above Option and Result types are kind of special generic types which are already defined in Rust’s standard library.Β 

+
    +
  • An optional value can have either Some value or no value/ None.
  • +
  • A result can represent either success/ Ok or failure/ Err
  • +
+
+

Usages of Option

+
// 01 - - - - - - - - - - - - - - - - - - - - - -
+fn get_id_by_username(username: &str) -> Option<usize> {
+    // if username can be found in the system, set userId
+        return Some(userId);
+    // else
+        None
+}
+
+// πŸ’­ So, on the above function, instead of setting return type as usize
+//   set return type as Option<usize>
+// Instead of return userId, return Some(userId)
+//   else None (πŸ’‘remember? last return statement no need return keyword and ending ;)
+
+// 02 - - - - - - - - - - - - - - - - - - - - - -
+struct Task {
+    title: String,
+    assignee: Option<Person>,
+}
+
+// πŸ’­ Instead of assignee: Person, we use Option<Person>
+// because the task has not been assigned to a specific person
+
+// - - - - - - - - - - - - - - - - - - - - - - -
+// When using Option types as return types on functions
+// we can use pattern matching to catch the relevant return type(Some/None) when calling them
+
+fn main() {
+    let username = "anonymous";
+    match get_id_by_username(username) {
+        None => println!("User not found"),
+        Some(i) => println!("User Id: {}", i)
+    }
+}
+

Usages of Result

+
+

πŸ“– The Option type is a way to use Rust’s type system to express the possibility of absence. Result expresses the possibility of error.

+
+
// - - - - - - - - - - - - - - - - - - - - - -
+fn get_word_count_from_file(file_name: &str) -> Result<u32, &str> {
+  // if the file is not found on the system, return error
+    return Err("File can not be found!")
+  // else, count and return the word count
+    // let mut word_count: u32; ....
+    Ok(word_count)
+}
+
+// πŸ’­ On the above function,
+// instead panic(break) the app, when the file can not be found; return Err(something)
+// or when it could get the relevant data; return Ok(data)
+
+
+// - - - - - - - - - - - - - - - - - - - - - - -
+// We can use pattern matching to catch the relevant return type(Ok/Err) when calling it
+
+fn main() {
+    let mut file_name = "file_a";
+    match get_word_count_from_file(file_name) {
+        Ok(i) => println!("Word Count: {}", i),
+        Err(e) => println!("Error: {}", e)
+    }
+}
+
+

πŸ”Ž Many useful methods have been implemented around Option and Result types. More information can be found on std::option::Option and std::result::Result pages on Rust doc.

+
+

⭐️ Also more practical examples of options & results can be found on Error Handling section in Rust doc.

+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + οΉ€ Previous + + + + Next οΉ₯ + + +
+
+ + +
+ +
+
πŸ§‘β€πŸ’»Built by and copyrightDumindu MadunuwanπŸ“… 2016-2023πŸš€ GitHub
+
+ +
+
+
+ +
+ +
+ + + \ No newline at end of file diff --git a/docs/docs/hello-world/index.html b/docs/docs/hello-world/index.html new file mode 100644 index 0000000..94dcaa6 --- /dev/null +++ b/docs/docs/hello-world/index.html @@ -0,0 +1,540 @@ + + + + + + + + + + + + + Hello World Β· Learning Rust + + + + + + + + + + + + + + +
+ + + +
+
+ +
+ +
+
+ +
+

Hello World

+

+
+
+

Hello, World!

+
fn main() {
+    println!("Hello, world!");
+}
+

fn means function. The main function is the beginning of every Rust program.
+println!() prints text to the console and its ! indicates that it’s a macro rather than a function.

+
+

πŸ’‘ Rust files should have .rs file extension and if you’re using more than one word for the file name, follow the snake_case convention.

+
+
    +
  • Save the above code in file.rs , but it can be any name with .rs extension.
  • +
  • Compile it with rustc file.rs
  • +
  • Execute it with ./file on Linux and Mac or file.exe on Windows
  • +
+

Rust Playground

+

Rust Playground is a web interface for running Rust code.

+

Rust Playground

+

πŸ‘¨β€πŸ« Before going to the next…

+
    +
  • These are the other usages of the println!() macro,
  • +
+
fn main() {
+    println!("{}, {}!", "Hello", "world"); // Hello, world!
+    println!("{0}, {1}!", "Hello", "world"); // Hello, world!
+    println!("{greeting}, {name}!", greeting = "Hello", name = "world"); // Hello, world!
+
+    let (greeting, name) = ("Hello", "world"); // πŸ’‘ Two Variable bindings declare & initialize in one line.
+    println!("{greeting}, {name}!"); // Hello, world!
+
+    println!("{:?}", [1, 2, 3]); // [1, 2, 3]
+    println!("{:#?}", [1, 2, 3]);
+    /*
+        [
+            1,
+            2,
+            3
+        ]
+    */
+
+    // πŸ”Ž The format! macro is used to store the formatted string.
+    let x = format!("{}, {}!", "Hello", "world");
+    println!("{}", x); // Hello, world!
+
+    // πŸ’‘ Rust has a print!() macro as well
+    print!("Hello, world!"); // Without new line
+    println!(); // A new line
+
+    print!("Hello, world!\n"); // With new line
+}
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + οΉ€ Previous + + + + Next οΉ₯ + + +
+
+ + +
+ +
+
πŸ§‘β€πŸ’»Built by and copyrightDumindu MadunuwanπŸ“… 2016-2023πŸš€ GitHub
+
+ +
+
+
+ +
+ +
+ + + \ No newline at end of file diff --git a/docs/docs/impls-and-traits/index.html b/docs/docs/impls-and-traits/index.html new file mode 100644 index 0000000..558d8b2 --- /dev/null +++ b/docs/docs/impls-and-traits/index.html @@ -0,0 +1,741 @@ + + + + + + + + + + + + + Impls & Traits Β· Learning Rust + + + + + + + + + + + + + + +
+ + + +
+
+ +
+ +
+
+ +
+

Impls & Traits

+

+
+
+

πŸ’‘ When we discussed about C-like structs, I mentioned that those are similar to classes in OOP languages but without their methods. impls are used to define methods for Rust structs and enums.

+

πŸ’‘ Traits are kind of similar to interfaces in OOP languages. They are used to define the functionality a type must provide. Multiple traits can be implemented for a single type.

+

⭐️️ But traits can also include default implementations of methods. Default methods can be overridden when implementing types.

+

Impls without traits

+
struct Player {
+    first_name: String,
+    last_name: String,
+}
+
+impl Player {
+    fn full_name(&self) -> String {
+        format!("{} {}", self.first_name, self.last_name)
+    }
+}
+
+fn main() {
+    let player_1 = Player {
+        first_name: "Rafael".to_string(),
+        last_name: "Nadal".to_string(),
+    };
+
+    println!("Player 01: {}", player_1.full_name());
+}
+
+// ⭐️ Implementation must appear in the same crate as the self type
+
+// πŸ’‘ And also in Rust, new traits can be implemented for existing types even for types like i8, f64 and etc.
+// Same way existing traits can be implemented for new types you are creating.
+// But we can not implement existing traits into existing types.
+

Impls & traits, without default methods

+
struct Player {
+    first_name: String,
+    last_name: String,
+}
+
+trait FullName {
+    fn full_name(&self) -> String;
+}
+
+impl FullName for Player {
+    fn full_name(&self) -> String {
+        format!("{} {}", self.first_name, self.last_name)
+    }
+}
+
+fn main() {
+    let player_2 = Player {
+        first_name: "Roger".to_string(),
+        last_name: "Federer".to_string(),
+    };
+
+    println!("Player 02: {}", player_2.full_name());
+}
+
+// πŸ”Ž Other than functions, traits can contain constants and types.
+

Impls, traits & default methods

+
trait Foo {
+    fn bar(&self);
+    fn baz(&self) { println!("We called baz."); }
+}
+

⭐️ As you can see methods take a special first parameter, the type itself. It can be either self, &self, or &mut self; self if it’s a value on the stack (taking ownership), &self if it’s a reference, and &mut self if it’s a mutable reference.

+

Impls with Associated functions

+

Some other languages support static methods. At such times, we call a function directly through the class without creating an object. In Rust, we call them Associated Functions. we useΒ :: instead ofΒ . when calling them from the struct. +ex. Person::new(β€œElon Musk Jr”);

+
struct Player {
+    first_name: String,
+    last_name: String,
+}
+
+impl Player {
+    fn new(first_name: String, last_name: String) -> Player {
+        Player {
+            first_name: first_name,
+            last_name: last_name,
+        }
+    }
+
+    fn full_name(&self) -> String {
+        format!("{} {}", self.first_name, self.last_name)
+    }
+}
+
+fn main() {
+    let player_name = Player::new("Serena".to_string(), "Williams".to_string()).full_name();
+    println!("Player: {}", player_name);
+}
+
+// We have used :: notation for `new()` and . notation for `full_name()`
+
+// πŸ”Ž Also in here, instead of using new() and full_name() separately as two expressions, 
+// we can use Method Chaining. ex. `player.add_points(2).get_point_count();`
+

Traits with generics

+
trait From<T> {
+    fn from(T) -> Self;
+}
+    impl From<u8> for u16 {
+        //...
+    }
+    impl From<u8> for u32{
+        //...
+    }
+    
+// Should specify after the trait name like generic functions
+

Traits inheritance

+
trait Person {
+    fn full_name(&self) -> String;
+}
+
+    trait Employee : Person { // Employee inherits from person trait
+      fn job_title(&self) -> String;
+    }
+
+    trait ExpatEmployee : Employee + Expat { // ExpatEmployee inherits from Employee and Expat traits
+      fn additional_tax(&self) -> f64;
+    }
+

Trait objects

+

πŸ”Ž While Rust favors static dispatch, it also supports dynamic dispatch through a mechanism called β€˜trait objects.’

+
+

πŸ…† Dynamic dispatch is the process of selecting which implementation of a polymorphic operation (method or function) to call at run time.

+
+
trait GetSound {
+    fn get_sound(&self) -> String;
+}
+
+struct Cat {
+    sound: String,
+}
+    impl GetSound for Cat {
+        fn get_sound(&self) -> String {
+            self.sound.clone()
+        }
+    }
+
+struct Bell {
+    sound: String,
+}
+    impl GetSound for Bell {
+        fn get_sound(&self) -> String {
+            self.sound.clone()
+        }
+    }
+
+
+fn make_sound<T: GetSound>(t: &T) {
+    println!("{}!", t.get_sound())
+}
+
+fn main() {
+    let kitty = Cat { sound: "Meow".to_string() };
+    let the_bell = Bell { sound: "Ding Dong".to_string() };
+
+    make_sound(&kitty); // Meow!
+    make_sound(&the_bell); // Ding Dong!
+}
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + οΉ€ Previous + + + + Next οΉ₯ + + +
+
+ + +
+ +
+
πŸ§‘β€πŸ’»Built by and copyrightDumindu MadunuwanπŸ“… 2016-2023πŸš€ GitHub
+
+ +
+
+
+ +
+ +
+ + + \ No newline at end of file diff --git a/docs/docs/index.html b/docs/docs/index.html new file mode 100644 index 0000000..9b408a3 --- /dev/null +++ b/docs/docs/index.html @@ -0,0 +1,10 @@ + + + + https://learning-rust.github.io/docs/overview/ + + + + + + diff --git a/docs/docs/index.xml b/docs/docs/index.xml new file mode 100644 index 0000000..9d617e3 --- /dev/null +++ b/docs/docs/index.xml @@ -0,0 +1,299 @@ + + + + Docs on Learning Rust + https://learning-rust.github.io/docs/ + Recent content in Docs on Learning Rust + Hugo -- gohugo.io + en-US + + + Borrowing + https://learning-rust.github.io/docs/borrowing/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/borrowing/ + In real life applications, most of the times we have to pass variable bindings to other functions or assign them to other variable bindings. In this case, we are referencing the original binding; borrow the data of it. +What is Borrowing? Borrow (verb) +To receive something with the promise of returning it. +Shared &amp; Mutable borrowings ⭐️ There are two types of Borrowing, +Shared Borrowing (&amp;T) +A piece of data can be borrowed by a single or multiple users, but data should not be altered. + + + Cargo, Crates and Basic Project Structure + https://learning-rust.github.io/docs/cargo-crates-and-basic-project-structure/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/cargo-crates-and-basic-project-structure/ + Cargo Cargo is Rust’s built-in package manager and the build system. It can be used to, +Create a new project: cargo new Create a new project in an existing directory: cargo init Build the project: cargo build Run the project: cargo run Update project dependencies: cargo update Run tests: cargo test Run benchmarks: cargo bench Generate the project documentation via rustdoc: cargo doc Analyze the project to see it has any errors, without building it: cargo check In addition, there are cargo commands to publish the project as a crate/ package to Rust&rsquo;s official crate registry, crates. + + + Code Organization + https://learning-rust.github.io/docs/code-organization/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/code-organization/ + When a single code block is getting larger, it should be decomposed into smaller pieces and should be organized in a proper manner. Rust supports different levels of code organization. +1. Functions 2. Modules Can be mapped to a, +Inline module File Directory hierarchy 3. Crates Can be mapped to a, +lib.rs file on the same executable crate +Dependency crate specified on Cargo.toml +Can be specified from, +Path Git repository crates. + + + Combinators + https://learning-rust.github.io/docs/combinators/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/combinators/ + What is a combinator? One meaning of β€œcombinator” is a more informal sense referring to the combinator pattern, a style of organizing libraries centered around the idea of combining things. Usually there is some type T, some functions for constructing β€œprimitive” values of type T, and some β€œcombinators” which can combine values of type T in various ways to build up more complex values of type T. The other definition is &ldquo;function with no free variables&rdquo;. + + + Comments and Documenting the code + https://learning-rust.github.io/docs/comments-and-documenting-the-code/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/comments-and-documenting-the-code/ + Comments // Line comments /* Block comments */ Nested block comments are supported. +πŸ’‘ By convention, try to avoid using block comments. Use line comments instead. +Doc Comments As we discussed, we can generate the project documentation via rustdoc by running the cargo doc command. It uses the doc comments to generate the documentation. +πŸ’‘ Usually we are adding doc comments on library crates. Also, we can use Markdown notations inside the doc comments. + + + Control Flows + https://learning-rust.github.io/docs/control-flows/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/control-flows/ + if - else if - else Using only if block. let age = 13; if age &lt; 18 { println!(&#34;Hello, child!&#34;); // The code prints this } Using only if and else blocks. let i = 7; if i % 2 == 0 { println!(&#34;Even&#34;); } else { println!(&#34;Odd&#34;); // The code prints this } Using with let statement. let age: u8 = 13; let is_below_eighteen = if age &lt; 18 { true } else { false }; // true More examples, // i. + + + Crates + https://learning-rust.github.io/docs/crates/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/crates/ + πŸ’­ Crates are a bit similar to the packages in some other languages. Crates compile individually. If the crate has child file modules, those files will get merged with the crate file and compile as a single unit. +πŸ’­ A crate can produce an executable/ a binary or a library. src/main.rs is the crate root/ entry point for a binary crate and src/lib.rs is the entry point for a library crate. + + + Custom Error Types + https://learning-rust.github.io/docs/custom-error-types/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/custom-error-types/ + Rust allow us to create our own Err types. We call them β€œCustom Error Types”. +Error trait As you know traits define the functionality a type must provide. But we don’t always need to define new traits for common functionalities, because Rust standard library provides reusable traits which can be implemented on our own types. While creating custom error types the std::error::Error trait helps us to convert any type to an Err type. + + + Enums + https://learning-rust.github.io/docs/enums/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/enums/ + ⭐️ An enum is a single type. It contains variants, which are possible values of the enum at a given time. For example, +enum Day { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday } // The `Day` is the enum // Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday are the variants ⭐️ Variants can be accessed throughΒ :: notation, ex. Day::Sunday +⭐️ Each enum variant can have, +No data (unit variant) Unnamed ordered data (tuple variant) Named data (struct variant) enum FlashMessage { Success, // A unit variant Warning{ category: i32, message: String }, // A struct variant Error(String) // A tuple variant } fn main() { let mut form_status = FlashMessage::Success; print_flash_message(form_status); form_status = FlashMessage::Warning {category: 2, message: String::from(&#34;Field X is required&#34;)}; print_flash_message(form_status); form_status = FlashMessage::Error(String::from(&#34;Connection Error&#34;)); print_flash_message(form_status); } fn print_flash_message(m : FlashMessage) { // Pattern matching with enum match m { FlashMessage::Success =&gt; println! + + + Error and None Propagation + https://learning-rust.github.io/docs/error-and-none-propagation/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/error-and-none-propagation/ + We should use panics like panic!(), unwrap(), expect() only if we can not handle the situation in a better way. Also if a function contains expressions which can produce either None or Err, +we can handle them inside the same function. Or, we can return None and Err types immediately to the caller. So the caller can decide how to handle them. πŸ’‘ None types no need to handle by the caller of the function always. + + + Functions + https://learning-rust.github.io/docs/functions/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/functions/ + Named functions Named functions are declared with the keyword fn When using arguments, you must declare the data types. By default, functions return an empty tuple/ (). If you want to return a value, the return type must be specified after -&gt; i. Hello world fn main() { println!(&#34;Hello, world!&#34;); } ii. Passing arguments fn print_sum(a: i8, b: i8) { println!(&#34;sum is: {}&#34;, a + b); } iii. Returning values // 01. + + + Functions (02) + https://learning-rust.github.io/docs/functions-02/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/functions-02/ + Functions are the first line of organization in any program. +fn main() { greet(); // Do one thing ask_location(); // Do another thing } fn greet() { println!(&#34;Hello!&#34;); } fn ask_location() { println!(&#34;Where are you from?&#34;); } We can add unit tests in the same file. +fn main() { greet(); } fn greet() -&gt; String { &#34;Hello, world!&#34;.to_string() } #[test] // Test attribute indicates this is a test function fn test_greet() { assert_eq! + + + Generics + https://learning-rust.github.io/docs/generics/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/generics/ + πŸ“– Sometimes, when writing a function or data type, we may want it to work for multiple types of arguments. In Rust, we can do this with generics. +πŸ’­ The concept is, instead of declaring a specific data type we use an uppercase letter(or PascalCase identifier). ex, instead of xΒ : u8 we use xΒ : TΒ . but we have to inform to the compiler that T is a generic type(can be any type) by adding &lt;T&gt; at first. + + + Hello World + https://learning-rust.github.io/docs/hello-world/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/hello-world/ + Hello, World! fn main() { println!(&#34;Hello, world!&#34;); } fn means function. The main function is the beginning of every Rust program. +println!() prints text to the console and its ! indicates that it’s a macro rather than a function. +πŸ’‘ Rust files should have .rs file extension and if you’re using more than one word for the file name, follow the snake_case convention. +Save the above code in file.rs , but it can be any name with . + + + Impls & Traits + https://learning-rust.github.io/docs/impls-and-traits/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/impls-and-traits/ + πŸ’‘ When we discussed about C-like structs, I mentioned that those are similar to classes in OOP languages but without their methods. impls are used to define methods for Rust structs and enums. +πŸ’‘ Traits are kind of similar to interfaces in OOP languages. They are used to define the functionality a type must provide. Multiple traits can be implemented for a single type. +⭐️️ But traits can also include default implementations of methods. + + + Installation + https://learning-rust.github.io/docs/installation/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/installation/ + Rustup There are many ways to install Rust on your system. For the moment the official way to install Rust is using Rustup. +πŸ“– Rustup installs The Rust Programming Language from the official release channels, enabling you to easily switch between stable, beta, and nightly compilers and keep them updated. It makes cross-compiling simpler with binary builds of the standard library for common platforms. +πŸ“– Rustup installs rustc, cargo, rustup and other standard tools to Cargo&rsquo;s bin directory. + + + Lifetimes + https://learning-rust.github.io/docs/lifetimes/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/lifetimes/ + When we are dealing with references, we have to make sure that the referencing data stay alive until we stop using the references. +Think, +We have a variable binding, a. We are referencing the value of a, from another variable binding x. We have to make sure that a lives until we stop using x. πŸ”Ž Memory management is a form of resource management applied to computer memory. Up until the mid-1990s, the majority of programming languages used Manual Memory Management which requires the programmer to give manual instructions to identify and deallocate unused objects/ garbage. + + + Modules + https://learning-rust.github.io/docs/modules/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/modules/ + 01. In the same file Related code and data are grouped into a module and stored in the same file. +fn main() { greetings::hello(); } mod greetings { // ⭐️ By default, everything inside a module is private pub fn hello() { // ⭐️ So function has to be public to access from outside println!(&#34;Hello, world!&#34;); } } Modules can also be nested. +fn main() { phrases::greetings::hello(); } mod phrases { pub mod greetings { pub fn hello() { println! + + + Operators + https://learning-rust.github.io/docs/operators/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/operators/ + Arithmetic Operators + - * / % +let a = 5; let b = a + 1; //6 let c = a - 1; //4 let d = a * 2; //10 let e = a / 2; // ⭐️ 2 not 2.5 let f = a % 2; //1 let g = 5.0 / 2.0; //2.5 Comparison Operators == != &lt; &gt; &lt;= &gt;= +let a = 1; let b = 2; let c = a == b; //false let d = a ! + + + Option and Result + https://learning-rust.github.io/docs/option-and-result/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/option-and-result/ + Why Option and Result? Many languages use null\ nil\ undefined types to represent empty outputs, and Exceptions to handle errors. Rust skips using both, especially to prevent issues like null pointer exceptions, sensitive data leakages through exceptions and etc. Instead, Rust provides two special generic enums;Option and Result to deal with above cases. +πŸ’­ In the previous sections, we have discussed about the basics of enums, generics and Result &amp; Option types. + + + Overview + https://learning-rust.github.io/docs/overview/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/overview/ + This is based on the posts I wrote on Medium, https://medium.com/learning-rust +🐣 I am a Sri Lankan πŸ‡±πŸ‡° Web Developer who lives in Singapore πŸ‡ΈπŸ‡¬. So I am not a native English speaker and just learning Rust, If you found any mistake or something need to be changed, even a spelling or a grammar mistake, feel free to create a pull request. Thanks. + + + Ownership + https://learning-rust.github.io/docs/ownership/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/ownership/ + fn main() { let a = [1, 2, 3]; let b = a; println!(&#34;{:?} {:?}&#34;, a, b); // [1, 2, 3] [1, 2, 3] } fn main() { let a = vec![1, 2, 3]; let b = a; println!(&#34;{:?} {:?}&#34;, a, b); // Error; use of moved value: `a` } In the above examples, we are just trying to assign the value of a to b . Almost the same code in both code blocks, but having two different data types. + + + Panicking + https://learning-rust.github.io/docs/panicking/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/panicking/ + panic!() In some cases, when an error occurs we can not do anything to handle it, if the error is something which should not have happened. In other words, if it’s an unrecoverable error. Also when we are not using a feature-rich debugger or proper logs, sometimes we need to debug the code by quitting the program from a specific line of code by printing out a specific message or a value of a variable binding to understand the current flow of the program. + + + Primitive Data Types + https://learning-rust.github.io/docs/primitive-data-types/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/primitive-data-types/ + bool true or false +let x = true; let y: bool = false; // ⭐️ no TRUE, FALSE, 1, 0 char A single Unicode scalar value +let x = &#39;x&#39;; let y: char = &#39;😎&#39;; // ⭐️ no &#34;x&#34;, only single quotes Because of Unicode support, char is not a single byte, but four(32 bits). +i8, i16, i32, i64, i128 8, 16, 32, 64 and 128 bit fixed sized signed(+/-) integer types + + + Smart Compiler + https://learning-rust.github.io/docs/smart-compiler/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/smart-compiler/ + Why Compiler? The Rust compiler does the most significant job to prevent errors in Rust programs. It analyzes the code at compile-time and issues warnings, if the code does not follow memory management rules or lifetime annotations correctly. +For example, +#[allow(unused_variables)] //πŸ’‘ A lint attribute used to suppress the warning; unused variable: `b` fn main() { let a = vec![1, 2, 3]; let b = a; println!(&#34;{:?}&#34;, a); } // ------ Compile-time error ------ error[E0382]: use of moved value: `a` --&gt; src/main. + + + STD, Primitives and Preludes + https://learning-rust.github.io/docs/std-primitives-and-preludes/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/std-primitives-and-preludes/ + ⭐️ In Rust, language elements are implemented by not only std library crate but also compiler as well. Examples, +Primitives: Defined by the compiler and methods are implemented by std library directly on primitives. Standard Macros: Defined by both compiler and std The std library has been divided into modules, according to the main areas each covered. +⭐️ While primitives are implemented by the compiler, the standard library implements the most useful methods directly on the primitive types. + + + Structs + https://learning-rust.github.io/docs/structs/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/structs/ + ⭐️ Structs are used to encapsulate related properties into one unified data type. +πŸ’‘ By convention, the name of the struct should follow PascalCase. +There are 3 variants of structs, +C-like structs One or more comma-separated name:value pairs Brace-enclosed list Similar to classes (without its methods) in OOP languages Because fields have names, we can access them through dot notation Tuple structs One or more comma-separated values A parenthesized list like tuples Looks like a named tuples Unit structs A struct with no members at all It defines a new type but it resembles an empty tuple, () Rarely in use, useful with generics ⭐️ When regarding OOP in Rust, attributes and methods are placed separately on structs and traits. + + + Unwrap and Expect + https://learning-rust.github.io/docs/unwrap-and-expect/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/unwrap-and-expect/ + unwrap() If an Option type has Some value or a Result type has a Ok value, the value inside them passes to the next step. If the Option type has None value or the Result type has Err value, program panics; If Err, panics with the error message. The functionality is bit similar to the following codes, which are using match instead unwrap(). +Example with Option and match, before using unwrap() + + + Use + https://learning-rust.github.io/docs/use/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/use/ + Let&rsquo;s see the main usages of the use keyword. +01. Bind a full path to a new name Mainly use keyword is used to bind a full path of an element to a new name. So the user doesn’t want to repeat the full path each time. +// -- Initial code without the `use` keyword -- mod phrases { pub mod greetings { pub fn hello() { println!(&#34;Hello, world!&#34;); } } } fn main() { phrases::greetings::hello(); // Using full path } // -- Usage of the `use` keyword -- // 01. + + + Variable bindings, Constants & Statics + https://learning-rust.github.io/docs/variable-bindings-constants-and-statics/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/variable-bindings-constants-and-statics/ + Variable bindings, Constants &amp; Statics ⭐️ In Rust, variables are immutable by default, so we call them Variable bindings. To make them mutable, the mut keyword is used. +⭐️ Rust is a statically typed language; it checks data types at compile-time. But it doesn’t require you to actually type it when declaring variable bindings. In that case, the compiler checks the usage and sets a better data type for it. But for constants and statics, you must annotate the type. + + + Vectors + https://learning-rust.github.io/docs/vectors/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/vectors/ + If you remember, the array is a fixed-size list of elements, of the same data type. Even with mut, its element count cannot be changed. A vector is kind of a re-sizable array but all elements must be in the same type. +⭐️ It’s a generic type, written as Vec&lt;T&gt;Β . T can have any type, ex. The type of a Vec of i32s is Vec&lt;i32&gt;. Also, Vectors always allocate their data in a dynamically allocated heap. + + + Why Rust? + https://learning-rust.github.io/docs/why-rust/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/why-rust/ + History of Rust Rust was initially designed and developed by former Mozilla employee Graydon Hoare as a personal project. Mozilla began sponsoring the project in 2009 and announced it in 2010. But the first stable release, Rust 1.0 was released on May 15, 2015. +Initial Goals The goal of Rust is to be a good programming language for creating highly concurrent, safe and performant systems. +&ldquo;Rust is a systems programming language focused on three goals: safety, speed, and concurrency. + + + Workspaces + https://learning-rust.github.io/docs/workspaces/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/workspaces/ + When the code base is getting larger, you might need to work with multiple crates on the same project. Rust supports this via Workspaces. You can analyze (cargo check), build, run tests or generate docs for all crates at once by running cargo commands from the project root. +⭐️ When working on multiple crates same time, there is a higher possibility of having shared dependencies on crates. To prevent downloading and compiling the same dependency multiple times, Rust uses a shared build directory under the project root, while running cargo build from the project root. + + + diff --git a/docs/docs/installation/index.html b/docs/docs/installation/index.html new file mode 100644 index 0000000..e343c7e --- /dev/null +++ b/docs/docs/installation/index.html @@ -0,0 +1,516 @@ + + + + + + + + + + + + + Installation Β· Learning Rust + + + + + + + + + + + + + + +
+ + + +
+
+ +
+ +
+
+ +
+

Installation

+

+
+
+

Rustup

+

There are many ways to install Rust on your system. For the moment the official way to install Rust is using Rustup.

+

πŸ“– Rustup installs The Rust Programming Language from the official release channels, enabling you to easily switch between stable, beta, and nightly compilers and keep them updated. It makes cross-compiling simpler with binary builds of the standard library for common platforms.

+

πŸ“– Rustup installs rustc, cargo, rustup and other standard tools to Cargo’s bin directory. On Unix it is located at $HOME/.cargo/bin and on Windows at %USERPROFILE%\.cargo\bin. This is the same directory that cargo install will install Rust programs and Cargo plugins.

+
+

πŸ”Ž The main tools Rustup installs to the Cargo’s bin directory,

+
    +
  • rustc: The Rust compiler.
  • +
  • cargo: The Rust’s built-in package manager and the build system.
  • +
  • rustup: The Rust toolchain installer.
  • +
  • rustfmt: The Rust’s official tool of formatting Rust code according to style guidelines.
  • +
  • cargo-fmt: Helps to run rustfmt on whole Rust projects, including multi-crate workspaces.
  • +
  • cargo-clippy: A lint tool that provides extra checks for common mistakes and stylistic choices.
  • +
  • cargo-miri:An experimental Rust interpreter, which can be used for checking for undefined-behavior.
  • +
  • rls: A language server that provides support for editors and IDEs.
  • +
  • rustdoc: A local copy of the Rust documentation.
  • +
+
+

Installation

+

For Mac and Linux Users

+
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
+

For Windows Users

+

Download rustup-init.exe from www.rustup.rs and run.

+
+

⭐ If you are on Microsoft Windows, you have to install Visual C++ Build Tools 2015 or higher, which requires an additional 3–4 GBs.

+
+

πŸ‘¨β€πŸ« Before going to the next…

+
    +
  • To verify the current Rust version, use the rustc --version or rustc -V command.
  • +
  • Rust ships releases on six week cycles. When a new Rust version released, use the rustup update command to update the Rust ecosystem.
  • +
  • To open the offline Rust documentation, use the rustup doc command. For more rustup commands, check the rustup --help command.
  • +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + οΉ€ Previous + + + + Next οΉ₯ + + +
+
+ + +
+ +
+
πŸ§‘β€πŸ’»Built by and copyrightDumindu MadunuwanπŸ“… 2016-2023πŸš€ GitHub
+
+ +
+
+
+ +
+ +
+ + + \ No newline at end of file diff --git a/docs/docs/learning_rust_medium.png b/docs/docs/learning_rust_medium.png new file mode 100644 index 0000000000000000000000000000000000000000..cf7a65926d0e84d47f241383fc01d42c0ff08ca2 GIT binary patch literal 289415 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

sCUlC(pjQ!&*D5yQvk^>waJ|7Z7HQzB24jk~ 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 VsFL$4%Q!>(j1A1d^|$WD{0pI0{_y|+ literal 0 HcmV?d00001 diff --git a/docs/docs/lifetimes/index.html b/docs/docs/lifetimes/index.html new file mode 100644 index 0000000..ab166d8 --- /dev/null +++ b/docs/docs/lifetimes/index.html @@ -0,0 +1,833 @@ + + + + + + + + + + + + + Lifetimes Β· Learning Rust + + + + + + + + + + + + + + +

+ + + +
+
+ +
+ +
+
+ +
+

Lifetimes

+

+
+
+

When we are dealing with references, we have to make sure that the referencing data stay alive until we stop using the references.

+

Think,

+
    +
  • We have a variable binding, a.
  • +
  • We are referencing the value of a, from another variable binding x. +We have to make sure that a lives until we stop using x.
  • +
+
+

πŸ”Ž Memory management is a form of resource management applied to computer memory. Up until the mid-1990s, the majority of programming languages used Manual Memory Management which requires the programmer to give manual instructions to identify and deallocate unused objects/ garbage. Around 1959 John McCarthy invented Garbage collection(GC), a form of Automatic Memory Management(AMM). It determines what memory is no longer used and frees it automatically instead of relying on the programmer. However Objective-C and Swift provide similar functionality through Automatic Reference Counting(ARC).

+
+

What is Lifetime?

+

In Rust,

+
    +
  • A resource can only have one owner at a time. When it goes out of the scope, Rust removes it from the Memory.
  • +
  • When we want to reuse the same resource, we are referencing it/ borrowing its content.
  • +
  • When dealing with references, we have to specify lifetime annotations to provide instructions for the compiler to set how long those referenced resources should be alive.
  • +
  • ⭐ But because of lifetime annotations make the code more verbose, in order to make common patterns more ergonomic, Rust allows lifetimes to be elided/omitted in fn definitions. In this case, the compiler assigns lifetime annotations implicitly.
  • +
+

Lifetime annotations are checked at compile-time. Compiler checks when a data is used for the first and the last times. According to that, Rust manages memory in run time. This is the major reason for slower compilation times in Rust.

+
+
    +
  • Unlike C and C++, usually, Rust doesn’t explicitly drop values at all.
  • +
  • Unlike GC, Rust doesn’t place deallocation calls where the data is no longer referenced.
  • +
  • Rust places deallocation calls where the data is about to go out of the scope and then enforces that no references to that resource exist after that point.
  • +
+
+

Usage

+

Lifetimes are denoted with an apostrophe. By convention, a lowercase letter is used for naming. Usually starts with 'a and follows alphabetic order when we need to add multiple lifetime annotations.

+

When using references,

+

01. On Function Declaration

+
    +
  • +

    Input and output parameters with references should attach lifetimes after the & sign. +ex. ..(x: &'a str) , ..(x: &'a mut str)

    +
  • +
  • +

    After the function name, we should mention that the given lifetimes are generic types. +ex. fn foo<'a>(..) , fn foo<'a, 'b>(..)

    +
  • +
+
// No inputs, return a reference
+fn function<'a>() -> &'a str {}
+
+// Single input
+fn function<'a>(x: &'a str) {}
+
+// Single input and output, both have the same lifetime
+// The output should live at least as long as input exists
+fn function<'a>(x: &'a str) -> &'a str {}
+
+// Multiple inputs, only one input and the output share same lifetime
+// The output should live at least as long as y exists
+fn function<'a>(x: i32, y: &'a str) -> &'a str {}
+
+// Multiple inputs, both inputs and the output share same lifetime
+// The output should live at least as long as x and y exist
+fn function<'a>(x: &'a str, y: &'a str) -> &'a str {}
+
+// Multiple inputs, inputs can have different lifetimes πŸ”Ž
+// The output should live at least as long as x exists
+fn function<'a, 'b>(x: &'a str, y: &'b str) -> &'a str {}
+

02. On Struct or Enum Declaration

+
    +
  • Elements with references should attach lifetimes after the & sign.
  • +
  • After the name of the struct or enum, we should mention that the given lifetimes are generic types.
  • +
+
// Single element
+// Data of x should live at least as long as Struct exists
+struct Struct<'a> {
+    x: &'a str
+}
+
+// Multiple elements
+// Data of x and y should live at least as long as Struct exists
+struct Struct<'a> {
+    x: &'a str,
+    y: &'a str
+}
+
+
+// Variant with a single element
+// Data of the variant should live at least as long as Enum exists
+enum Enum<'a> {
+    Variant(&'a Type)
+}
+

03. With Impls and Traits

+
struct Struct<'a> {
+    x: &'a str
+}
+    impl<'a> Struct<'a> {
+        fn function<'a>(&self) -> &'a str {
+            self.x
+        }
+    }
+
+
+struct Struct<'a> {
+    x: &'a str,
+    y: &'a str
+}
+    impl<'a> Struct<'a> {
+        fn new(x: &'a str, y: &'a str) -> Struct<'a> { // No need to specify <'a> after new; impl already has it
+          Struct {
+              x : x,
+              y : y
+          }
+        }
+    }
+
+
+// πŸ”Ž
+impl<'a> Trait<'a> for Type
+impl<'a> Trait for Type<'a>
+

04. With Generic Types

+
// πŸ”Ž
+fn function<F>(f: F) where for<'a> F: FnOnce(&'a Type)
+struct Struct<F> where for<'a> F: FnOnce(&'a Type) { x: F }
+enum Enum<F> where for<'a> F: FnOnce(&'a Type) { Variant(F) }
+impl<F> Struct<F> where for<'a> F: FnOnce(&'a Type) { fn x(&self) -> &F { &self.x } }
+

Lifetime Elision

+

As I mentioned earlier, in order to make common patterns more ergonomic, Rust allows lifetimes to be elided/omitted. This process is called Lifetime Elision.

+

πŸ’‘ For the moment Rust supports Lifetime Elisions only on fn definitions. But in the future, it will support for impl headers as well.

+

Lifetime annotations of fn definitions can be elided
+if its parameter list has either,

+
    +
  • only one input parameter passes by reference.
  • +
  • a parameter with either &self or &mut self reference.
  • +
+
fn triple(x: &u64) -> u64 { // Only one input parameter passes by reference
+    x * 3
+}
+
+
+fn filter(x: u8, y: &str) -> &str { // Only one input parameter passes by reference
+    if x > 5 { y } else { "invalid inputs" }
+}
+
+
+struct Player<'a> {
+    id: u8,
+    name: &'a str
+}
+    impl<'a> Player<'a> { // So far Lifetime Elisions are allowed only on fn definitions. But in the future, they might support on impl headers as well.
+        fn new(id: u8, name: &str) -> Player { // Only one input parameter passes by reference
+            Player {
+                id : id,
+                name : name
+            }
+        }
+
+        fn heading_text(&self) -> String { // An fn definition with &self (or &mut self) reference
+            format!("{}: {}", self.id, self.name)
+        }
+    }
+
+fn main() {
+    let player1 = Player::new(1, "Serena Williams");
+    let player1_heading_text = player1.heading_text()
+    println!("{}", player1_heading_text);
+}
+
+

πŸ’‘ In the Lifetime Elision process of fn definitions,

+
    +
  • Each parameter passed by reference has got a distinct lifetime annotation. +ex. ..(x: &str, y: &str) β†’ ..<'a, 'b>(x: &'a str, y: &'b str)
  • +
  • If the parameter list only has one parameter passed by reference, that lifetime is assigned to all elided lifetimes in the return values of that function. +ex. ..(x: i32, y: &str) -> &str β†’ ..<'a>(x: i32, y: &'a str) -> &'a str
  • +
  • Even if it has multiple parameters passed by reference, if one of them has &self or &mut self, the lifetime of self is assigned to all elided output lifetimes. +ex. impl Impl{ fn function(&self, x: &str) -> &str {} } β†’ +impl<'a> Impl<'a>{ fn function(&'a self, x: &'b str) -> &'a str {} }
  • +
  • For all other cases, we have to write lifetime annotations manually.
  • +
+
+

'static Annotations

+

'static lifetime annotation is a reserved lifetime annotation. These references are valid for the entire program. They are saved in the data segment of the binary and the data referred to will never go out of scope.

+
static N: i32 = 5; // A constant with 'static lifetime
+
+let a = "Hello, world."; // a: &'static str
+
+
+fn index() -> &'static str { // No need to mention <'static> ; fn index ΜΆ<ΜΆ'ΜΆsΜΆtΜΆaΜΆtΜΆiΜΆcΜΆ>ΜΆ 
+	"Hello, world!"
+}
+

Few more examples about the usage of Rust lifetimes.

+
fn greeting<'a>() -> &'a str {
+  "Hi!"
+}
+
+
+fn fullname<'a>(fname: &'a str, lname: &'a str) -> String {
+  format!("{} {}", fname, lname)
+}
+
+
+struct Person<'a> {
+    fname: &'a str,
+    lname: &'a str
+}
+  impl<'a> Person<'a> {
+      fn new(fname: &'a str, lname: &'a str) -> Person<'a> { // No need to specify <'a> after new; impl already has it
+          Person {
+              fname : fname,
+              lname : lname
+          }
+      }
+
+      fn fullname(&self) -> String {
+          format!("{} {}", self.fname , self.lname)
+      }
+  }
+
+fn main() {
+    let player = Person::new("Serena", "Williams");
+    let player_fullname = player.fullname();
+
+    println!("Player: {}", player_fullname);
+}
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + οΉ€ Previous + + + + Next οΉ₯ + + +
+
+ + +
+ +
+
πŸ§‘β€πŸ’»Built by and copyrightDumindu MadunuwanπŸ“… 2016-2023πŸš€ GitHub
+
+ +
+
+
+ +
+ +
+ + + \ No newline at end of file diff --git a/docs/docs/modules/index.html b/docs/docs/modules/index.html new file mode 100644 index 0000000..64cdeaa --- /dev/null +++ b/docs/docs/modules/index.html @@ -0,0 +1,827 @@ + + + + + + + + + + + + + Modules Β· Learning Rust + + + + + + + + + + + + + + +
+ + + +
+
+ +
+ +
+
+ +
+

Modules

+

+
+
+

01. In the same file

+

Related code and data are grouped into a module and stored in the same file.

+
fn main() {
+   greetings::hello();
+}
+
+mod greetings {
+  // ⭐️ By default, everything inside a module is private
+  pub fn hello() { // ⭐️ So function has to be public to access from outside
+    println!("Hello, world!");
+  }
+}
+

Modules can also be nested.

+
fn main() { 
+  phrases::greetings::hello();
+}
+
+mod phrases { 
+  pub mod greetings { 
+    pub fn hello() { 
+      println!("Hello, world!");
+    }
+  }
+}
+

Private functions can be called from the same module or from a child module.

+
// 01. Calling private functions of the same module
+fn main() {
+  phrases::greet();
+}
+
+mod phrases {
+  pub fn greet() {
+    hello(); // Or `self::hello();`
+  }
+  
+  fn hello() {
+    println!("Hello, world!");
+  }
+}
+
+// 02. Calling private functions of the parent module
+fn main() {
+  phrases::greetings::hello();
+}
+
+mod phrases {
+  fn private_fn() {
+    println!("Hello, world!");
+  }
+  
+  pub mod greetings {
+    pub fn hello() {
+      super::private_fn();
+    }
+  }
+}
+
+

πŸ’‘ The self keyword is used to refer the same module, while the super keyword is used to refer parent module. Also, the super keyword can be used to access root functions from inside a module.

+
+
fn main() {
+  greetings::hello();
+}
+
+fn hello() {
+  println!("Hello, world!");
+}
+
+mod greetings {
+  pub fn hello() {
+    super::hello();
+  }
+}
+
+

πŸ”Ž When writing tests it’s a good practice to write tests inside a test module because they compile only when running tests.

+
+
fn greet() -> String {
+    "Hello, world!".to_string()
+}
+
+#[cfg(test)] // Only compiles when running tests
+mod tests {
+    use super::greet; // Import root greet function
+
+    #[test]
+    fn test_greet() {
+        assert_eq!("Hello, world!", greet());
+    }
+}
+

02. In a different file, same directory

+
// ↳ main.rs
+mod greetings; // Import greetings module
+
+fn main() {
+  greetings::hello();
+}
+
+// ↳ greetings.rs
+// ⭐️ No need to wrap the code with a mod declaration. The file itself acts as a module.
+pub fn hello() { // The function has to be public to access from outside
+  println!("Hello, world!");
+}
+

If we wrap file content with a mod declaration, it will act as a nested module.

+
// ↳ main.rs
+mod phrases;
+
+fn main() {
+  phrases::greetings::hello();
+}
+
+// ↳ phrases.rs
+pub mod greetings { // ⭐️ The module has to be public to access from outside
+  pub fn hello() {
+    println!("Hello, world!");
+  }
+}
+

03. In a different file, different directory

+

mod.rs in the directory module root is the entry point to the directory module. All other files in that directory root, act as sub-modules of the directory module.

+
// ↳ main.rs
+mod greetings;
+
+fn main() {
+  greetings::hello();
+}
+
+// ↳ greetings/mod.rs
+pub fn hello() { // ⭐️ The function has to be public to access from outside
+  println!("Hello, world!");
+}
+

Again, If we wrap file content with a mod declaration, it will act as a nested module.

+
// ↳ main.rs
+mod phrases;
+
+fn main() {
+  phrases::greetings::hello();
+}
+
+// ↳ phrases/mod.rs
+pub mod greetings { // ⭐️ The module has to be public to access from outside
+  pub fn hello() {
+    println!("Hello, world!");
+  }
+}
+

Other files in the directory module act as sub-modules for mod.rs.

+
// ↳ main.rs
+mod phrases;
+
+fn main() {
+  phrases::hello()
+}
+
+// ↳ phrases/mod.rs
+mod greetings;
+
+pub fn hello() {
+  greetings::hello()
+}
+
+// ↳ phrases/greetings.rs
+pub fn hello() {
+  println!("Hello, world!");
+}
+

⭐️ If you need to access an element of phrases/greetings.rs from outside the module, you have to import the greetings module as a public module.

+
// ↳ main.rs
+mod phrases;
+
+fn main() {
+    phrases::greetings::hello();
+}
+
+// ↳ phrases/mod.rs
+pub mod greetings;  // ⭐️ `pub mod` instead `mod`
+
+// ↳ phrases/greetings.rs
+pub fn hello() {
+  println!("Hello, world!");
+}
+
+

πŸ”Ž It’s unable to import child file modules of directory modules to main.rs, so you can’t use mod phrases::greetings; from main.rs. But there is a way to import phrases::greetings::hello() to phrases module by re-exporting hello to phrases module. So you can call it directly as phrases::hello().

+
+
// ↳ phrases/greetings.rs
+pub fn hello() {
+  println!("Hello, world!");
+}
+
+// ↳ phrases/mod.rs
+pub mod greetings;
+
+pub use self::greetings::hello; // Re-export `greetings::hello` to phrases
+
+// ↳ main.rs
+mod phrases;
+
+fn main() {
+    phrases::hello(); // You can call `hello()` directly from phrases
+}
+

This allows you to present an external interface that may not directly map to your internal code organization. If still it is not clear, don’t worry; We discuss the usages of use on an upcoming section in this post.

+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + οΉ€ Previous + + + + Next οΉ₯ + + +
+
+ + +
+ +
+
πŸ§‘β€πŸ’»Built by and copyrightDumindu MadunuwanπŸ“… 2016-2023πŸš€ GitHub
+
+ +
+
+
+ +
+ +
+ + + \ No newline at end of file diff --git a/docs/docs/operators/index.html b/docs/docs/operators/index.html new file mode 100644 index 0000000..b316df5 --- /dev/null +++ b/docs/docs/operators/index.html @@ -0,0 +1,655 @@ + + + + + + + + + + + + + Operators Β· Learning Rust + + + + + + + + + + + + + + +
+ + + +
+
+ +
+ +
+
+ +
+

Operators

+

+
+
+
    +
  • +

    Arithmetic Operators

    +
  • +
+

+ - * / %

+
let a = 5;
+let b = a + 1; //6
+let c = a - 1; //4
+let d = a * 2; //10
+let e = a / 2; // ⭐️ 2 not 2.5
+let f = a % 2; //1
+
+let g = 5.0 / 2.0; //2.5
+
    +
  • +

    Comparison Operators

    +
  • +
+

== != < > <= >=

+
let a = 1;
+let b = 2;
+
+let c = a == b; //false
+let d = a != b; //true
+let e = a < b; //true
+let f = a > b; //false
+let g = a <= a; //true
+let h = a >= a; //true
+
+// πŸ”Ž
+let i = true > false; //true
+let j = 'a' > 'A'; //true
+
    +
  • +

    Logical Operators

    +
  • +
+

! && ||

+
let a = true;
+let b = false;
+
+let c = !a; //false
+let d = a && b; //false
+let e = a || b; //true
+
+

πŸ”Ž On integer types,! inverts the individual bits in the two’s complement representation of the value.

+
let a = !-2; //1
+let b = !-1; //0
+let c = !0; //-1
+let d = !1; //-2
+
+
    +
  • +

    Bitwise Operators

    +
  • +
+

& | ^ << >>

+
let a = 1;
+let b = 2;
+
+let c = a & b;  //0  (01 && 10 -> 00)
+let d = a | b;  //3  (01 || 10 -> 11)
+let e = a ^ b;  //3  (01 != 10 -> 11)
+let f = a << b; //4  (Add b number of 0s to the end of a -> '01'+'00' -> 100)
+let g = a >> b; //0  (Remove b number of bits from the end of a -> oΜΆ1ΜΆ -> 0)
+
    +
  • +

    Assignment and Compound Assignment Operators

    +
  • +
+

The = operator is used to assign a name to a value or a function. Compound Assignment Operators are created by composing one of + - * / % & | ^ << >> operators with = operator.

+
let mut a = 2;
+
+a += 5; //2 + 5 = 7
+a -= 2; //7 - 2 = 5
+a *= 5; //5 * 5 = 25
+a /= 2; //25 / 2 = 12 not 12.5
+a %= 5; //12 % 5 = 2
+
+a &= 2; //10 && 10 -> 10 -> 2
+a |= 5; //010 || 101 -> 111 -> 7
+a ^= 2; //111 != 010 -> 101 -> 5
+a <<= 1; //'101'+'0' -> 1010 -> 10
+a >>= 2; //101ΜΆ0ΜΆ -> 10 -> 2
+
    +
  • +

    Type Casting Operator

    +
  • +
+

as

+
let a = 15;
+let b = (a as f64) / 2.0; //7.5
+
    +
  • +

    Borrowing and Dereference Operators

    +
  • +
+

& &mut *

+

πŸ”Ž The & or &mut operators are used for borrowing and * operator for dereferencing. For more information, refer Ownership, Borrowing & Lifetimes sections.

+

πŸ‘¨β€πŸ« Before going to the next…

+
    +
  • About string concatenation,
  • +
+
let (s1, s2) = ("some", "thing"); // both &str
+// All bellow codes return `String`; something
+
+let s = String::from(s1) + s2; // String + &str
+
+let mut s = String::from(s1); // String
+s.push_str(s2); // + &str
+
+let s = format!("{}{}", s1, s2); // &str/String + &str/String
+
+let s = [s1, s2].concat(); // &str or String array
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + οΉ€ Previous + + + + Next οΉ₯ + + +
+
+ + +
+ +
+
πŸ§‘β€πŸ’»Built by and copyrightDumindu MadunuwanπŸ“… 2016-2023πŸš€ GitHub
+
+ +
+
+
+ +
+ +
+ + + \ No newline at end of file diff --git a/docs/docs/option-and-result/index.html b/docs/docs/option-and-result/index.html new file mode 100644 index 0000000..75a68eb --- /dev/null +++ b/docs/docs/option-and-result/index.html @@ -0,0 +1,801 @@ + + + + + + + + + + + + + Option and Result Β· Learning Rust + + + + + + + + + + + + + + +
+ + + +
+
+ +
+ +
+
+ +
+

Option and Result

+

+
+
+

Why Option and Result?

+

Many languages use null\ nil\ undefined types to represent empty outputs, and Exceptions to handle errors. Rust skips using both, especially to prevent issues like null pointer exceptions, sensitive data leakages through exceptions and etc. Instead, Rust provides two special generic enums;Option and Result to deal with above cases.

+
+

πŸ’­ In the previous sections, we have discussed about the basics of enums, generics and Result & Option types.

+
+

As you know,

+
    +
  • An optional value can have either Some value or no value/ None.
  • +
  • A result can represent either success/ Ok or failure/ Err
  • +
+
// An output can have either Some value or no value/ None.
+enum Option<T> { // T is a generic and it can contain any type of value.
+    Some(T),
+    None,
+}
+
+// A result can represent either success/ Ok or failure/ Err.
+enum Result<T, E> { // T and E are generics. T can contain any type of value, E can be any error.
+    Ok(T),
+    Err(E),
+}
+

πŸ’­ Also as we discussed in preludes, not only Option and Result, and also their variants are in preludes. So, we can use them directly without using namespaces in the code.

+

Basic usages of Option

+

When writing a function or data type,

+
    +
  • if an argument of the function is optional,
  • +
  • If the function is non-void and if the output it returns can be empty,
  • +
  • If the value, of a property of the data type can be empty, +We have to use their data type as an Option type
  • +
+

For example, if the function outputs a &str value and the output can be empty, the return type of the function should set as Option<&str>.

+
fn get_an_optional_value() -> Option<&str> {
+
+    //if the optional value is not empty
+    return Some("Some value");
+    
+    //else
+    None
+}
+

Same way, if the value of a property of a data type can be empty or optional like the middle_name of Name data type in the following example, we should set its data type as an Option type.

+
struct Name {
+  first_name: String,
+  middle_name: Option<String>, // middle_name can be empty
+  last_name: String,
+}
+

πŸ’­ As you know, we can use pattern matching to catch the relevant return type (Some/ None) via match. There is a function to get the current user’s home directory in std::env as home_dir(). Because of all users doesn’t have a home directory in the systems like Linux, home directory of the user can be optional. So it returns an Option type; Option<PathBuf>.

+
use std::env;
+
+fn main() {
+    let home_path = env::home_dir();
+    match home_path {
+        Some(p) => println!("{:?}", p), // This prints "/root", if you run this in Rust playground
+        None => println!("Can not find the home directory!"),
+    }
+}
+

⭐ However, when using optional arguments with functions, we have to pass None values for empty arguments while calling the function.

+
fn get_full_name(fname: &str, lname: &str, mname: Option<&str>) -> String { // middle name can be empty
+  match mname {
+    Some(n) => format!("{} {} {}", fname, n, lname),
+    None => format!("{} {}", fname, lname),
+  }
+}
+
+fn main() {
+  println!("{}", get_full_name("Galileo", "Galilei", None));
+  println!("{}", get_full_name("Leonardo", "Vinci", Some("Da")));
+}
+
+// πŸ’‘ Better create a struct as Person with fname, lname, mname fields and create a impl function as full_name()
+

πŸ”Ž Other than that, Option types are used with nullable pointers in Rust. Because there are no null pointers in Rust, the pointer types should point to a valid location. So if a pointer can be nullable, we have use Option<Box<T>>Β .

+

Basic usages of Result

+

If a function can produce an error, we have to use a Result type by combining the data type of the valid output and the data type of the error. For example, if the data type of the valid output is u64 and error type is String, return type should be Result<u64, String>.

+
fn function_with_error() -> Result<u64, String> {
+  
+    //if error happens
+    return Err("The error message".to_string());
+
+    // else, return valid output
+    Ok(255)
+}
+

πŸ’­ As you know, we can use the pattern matching to catch the relevant return types (Ok/Err) via match. There is a function to fetch the value of any environment variable in std::env as var() . Its input is the environment variable name. This can produce an error, if we passes a wrong environment variable or the program can not extract the value of the environment variable while running. So, its return type is a Result type; Result<String, VarError>.

+
use std::env;
+
+fn main() {
+    let key = "HOME";
+    match env::var(key) {
+        Ok(v) => println!("{}", v), // This prints "/root", if you run this in Rust playground
+        Err(e) => println!("{}", e), // This prints "environment variable not found", if you give a nonexistent environment variable
+    }
+}
+

is_some(), is_none(), is_ok(), is_err()

+

Other than match expressions, Rust provides is_some() , is_none() and is_ok() , is_err() functions to identify the return type.

+
fn main() {
+    let x: Option<&str> = Some("Hello, world!");
+    assert_eq!(x.is_some(), true);
+    assert_eq!(x.is_none(), false);
+
+    let y: Result<i8, &str> = Ok(10);
+    assert_eq!(y.is_ok(), true);
+    assert_eq!(y.is_err(), false);
+}
+

ok(), err() for Result types

+

In addition to that Rust provides ok() and err() for Result types. They convert the Ok<T> and Err<E> values of a Result type to Option types.

+
fn main() {
+    let o: Result<i8, &str> = Ok(8);
+    let e: Result<i8, &str> = Err("message");
+    
+    assert_eq!(o.ok(), Some(8)); // Ok(v) ok = Some(v)
+    assert_eq!(e.ok(), None);    // Err(v) ok = None
+    
+    assert_eq!(o.err(), None);            // Ok(v) err = None
+    assert_eq!(e.err(), Some("message")); // Err(v) err = Some(v)
+}
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + οΉ€ Previous + + + + Next οΉ₯ + + +
+
+ + +
+ +
+
πŸ§‘β€πŸ’»Built by and copyrightDumindu MadunuwanπŸ“… 2016-2023πŸš€ GitHub
+
+ +
+
+
+ +
+ +
+ + + \ No newline at end of file diff --git a/docs/docs/overview/index.html b/docs/docs/overview/index.html new file mode 100644 index 0000000..84c45d7 --- /dev/null +++ b/docs/docs/overview/index.html @@ -0,0 +1,462 @@ + + + + + + + + + + + + + Overview Β· Learning Rust + + + + + + + + + + + + + + +
+ + + +
+
+ +
+ +
+
+ +
+

Overview

+

+
+
+

This is based on the posts I wrote on Medium, https://medium.com/learning-rust

+

Rust Playground

+
+

🐣 I am a Sri Lankan πŸ‡±πŸ‡° Web Developer who lives in Singapore πŸ‡ΈπŸ‡¬. So I am not a native English speaker and just learning Rust, If you found any mistake or something need to be changed, even a spelling or a grammar mistake, feel free to create a pull request. Thanks.

+
+ +
+ + +
+ + +
+ +
+
πŸ§‘β€πŸ’»Built by and copyrightDumindu MadunuwanπŸ“… 2016-2023πŸš€ GitHub
+
+ +
+
+
+ +
+ +
+ + + \ No newline at end of file diff --git a/docs/docs/ownership/index.html b/docs/docs/ownership/index.html new file mode 100644 index 0000000..6b8afe0 --- /dev/null +++ b/docs/docs/ownership/index.html @@ -0,0 +1,632 @@ + + + + + + + + + + + + + Ownership Β· Learning Rust + + + + + + + + + + + + + + +
+ + + +
+
+ +
+ +
+
+ +
+

Ownership

+

+
+
+
fn main() {
+    let a = [1, 2, 3];
+    let b = a;
+    println!("{:?} {:?}", a, b); // [1, 2, 3] [1, 2, 3]
+}
+
+fn main() {
+    let a = vec![1, 2, 3];
+    let b = a;
+    println!("{:?} {:?}", a, b); // Error; use of moved value: `a`
+}
+

In the above examples, we are just trying to assign the value of a to b . Almost the same code in both code blocks, but having two different data types. And the second one gives an error. This is because of the Ownership.

+

What is ownership?

+

⭐️ Variable bindings have ownership of what they’re bound to. A piece of data can only have one owner at a time. When a binding goes out of scope, Rust will free the bound resources. This is how Rust achieves memory safety.

+
+

Ownership (noun)
+The act, state, or right of possessing something.

+
+

Copy types & move types

+

⭐️ When assigning a variable binding to another variable binding or when passing it to a function(Without referencing), if its data type is a

+
    +
  1. +

    Copy Type

    +
      +
    • Bound resources are made a copy and assign or pass it to the function.
    • +
    • The ownership state of the original bindings is set to β€œcopied” state.
    • +
    • Mostly Primitive types
    • +
    +
  2. +
  3. +

    Move type

    +
      +
    • Bound resources are moved to the new variable binding and we can not access the original variable binding anymore.
    • +
    • The ownership state of the original bindings is set to β€œmoved” state.
    • +
    • Non-primitive types
    • +
    +
  4. +
+
+

πŸ”Ž The functionality of a type is handled by the traits which have been implemented to it. By default, variable bindings have β€˜move semantics.’ However, if a type implements core::marker::Copy trait , it has a ‘copy semantics’.

+
+

πŸ’‘ So in the above second example, ownership of the Vec object moves to b and a doesn’t have any ownership to access the resource.

+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + οΉ€ Previous + + + + Next οΉ₯ + + +
+
+ + +
+ +
+
πŸ§‘β€πŸ’»Built by and copyrightDumindu MadunuwanπŸ“… 2016-2023πŸš€ GitHub
+
+ +
+
+
+ +
+ +
+ + + \ No newline at end of file diff --git a/docs/docs/panicking/index.html b/docs/docs/panicking/index.html new file mode 100644 index 0000000..9d478f6 --- /dev/null +++ b/docs/docs/panicking/index.html @@ -0,0 +1,866 @@ + + + + + + + + + + + + + Panicking Β· Learning Rust + + + + + + + + + + + + + + +
+ + + +
+
+ +
+ +
+
+ +
+

Panicking

+

+
+
+

panic!()

+
    +
  • In some cases, when an error occurs we can not do anything to handle it, if the error is something which should not have happened. In other words, if it’s an unrecoverable error.
  • +
  • Also when we are not using a feature-rich debugger or proper logs, sometimes we need to debug the code by quitting the program from a specific line of code by printing out a specific message or a value of a variable binding to understand the current flow of the program. +For above cases, we can use panic! macro.
  • +
+

⭐ panic!() runs thread based. One thread can be panicked, while other threads are running.

+

01. Quit from a specific line.

+
fn main() {
+    // some code
+
+    // if we need to debug in here
+    panic!();
+}
+
+// -------------- Compile-time error --------------
+thread 'main' panicked at 'explicit panic', src/main.rs:5:5
+

02. Quit with a custom error message.

+
#[allow(unused_mut)] // πŸ’‘ A lint attribute used to suppress the warning; username variable does not need to be mutable
+fn main() {
+    let mut username = String::new();
+
+    // some code to get the name
+  
+    if username.is_empty() {
+        panic!("Username is empty!");
+    }
+
+    println!("{}", username);
+}
+
+// -------------- Compile-time error --------------
+thread 'main' panicked at 'Username is empty!', src/main.rs:8:9
+

03. Quit with the value of code elements.

+
#[derive(Debug)] // πŸ’‘ A lint attribute which use to implement `std::fmt::Debug` to Color
+struct Color {
+    r: u8,
+    g: u8,
+    b: u8,
+}
+
+#[allow(unreachable_code)] // πŸ’‘ A lint attribute used to suppress the warning; unreachable statement
+fn main() {
+    let some_color: Color;
+    
+    // some code to get the color. ex
+    some_color = Color {r: 255, g: 255, b: 0};
+
+    // if we need to debug in here
+    panic!("{:?}", some_color);
+
+    println!(
+        "The color = rgb({},{},{})",
+        some_color.r, some_color.g, some_color.b
+    );
+}
+
+// -------------- Compile-time error --------------
+thread 'main' panicked at 'Color { r: 255, g: 255, b: 0 }', src/main.rs:16:5
+

As you can see in the above examples panic!() supports println!() type style arguments. By default, it prints the error message, file path and line & column numbers where the error happens.

+

unimplemented!()

+

πŸ’‘ If your code is having unfinished code sections, there is a standardized macro as unimplemented!() to mark those routes. The program will be panicked with a β€œnot yet implemented” error message, if the program runs through those routes.

+
// error messages with panic!()
+thread 'main' panicked at 'explicit panic', src/main.rs:6:5
+thread 'main' panicked at 'Username is empty!', src/main.rs:9:9
+thread 'main' panicked at 'Color { r: 255, g: 255, b: 0 }', src/main.rs:17:5
+
+// error messages with unimplemented!()
+thread 'main' panicked at 'not yet implemented', src/main.rs:6:5
+thread 'main' panicked at 'not yet implemented: Username is empty!', src/main.rs:9:9
+thread 'main' panicked at 'not yet implemented: Color { r: 255, g: 255, b: 0 }', src/main.rs:17:5
+

unreachable!()

+

This is the standard macro to mark routes that the program should not enter. The program will be panicked with a β€œ‘internal error: entered unreachable code’” error message, if the program entered those routes.

+
fn main() {
+    let level = 22;
+    let stage = match level {
+        1..=5 => "beginner",
+        6..=10 => "intermediate",
+        11..=20 => "expert",
+        _ => unreachable!(),
+    };
+    
+    println!("{}", stage);
+}
+
+
+// -------------- Compile-time error --------------
+thread 'main' panicked at 'internal error: entered unreachable code', src/main.rs:7:20
+

We can set custom error messages for this as well.

+
// --- with a custom message ---
+_ => unreachable!("Custom message"),
+// -------------- Compile-time error --------------
+thread 'main' panicked at 'internal error: entered unreachable code: Custom message', src/main.rs:7:20
+
+
+// --- with debug data ---
+_ => unreachable!("level is {}", level),
+// -------------- Compile-time error --------------
+thread 'main' panicked at 'internal error: entered unreachable code: level is 22', src/main.rs:7:14
+

assert!(), assert_eq!(), assert_ne!()

+

These are standard macros which usually use with test assertions.

+
    +
  • assert!() ensures that a boolean expression is true. It panics if the expression is false.
  • +
+
fn main() {
+    let f = false;
+    
+    assert!(f)
+}
+
+
+// -------------- Compile-time error --------------
+thread 'main' panicked at 'assertion failed: f', src/main.rs:4:5
+
    +
  • assert_eq!() ensures that two expressions are equal. It panics if the expressions are not equal.
  • +
+
fn main() {
+    let a = 10;
+    let b = 20;
+    
+    assert_eq!(a, b);
+}
+
+
+// -------------- Compile-time error --------------
+thread 'main' panicked at 'assertion failed: `(left == right)`
+  left: `10`,
+ right: `20`', src/main.rs:5:5
+
    +
  • assert_ne!() ensures that two expressions are not equal. It panics if the expressions are equal.
  • +
+
fn main() {
+    let a = 10;
+    let b = 10;
+    
+    assert_ne!(a, b);
+}
+
+
+// -------------- Compile-time error --------------
+thread 'main' panicked at 'assertion failed: `(left != right)`
+  left: `10`,
+ right: `10`', src/main.rs:5:5
+
+

⭐ Expressions which use with assert_eq!() and assert_ne!() should return same data type.

+
+

We can set custom error messages for these macros as well. For examples,

+
    +
  1. With a custom message for assert_eq!()
  2. +
+
fn main() {
+    let a = 10;
+    let b = 20;
+    
+    assert_eq!(a, b, "a and b should be equal");
+}
+
+
+// -------------- Compile-time error --------------
+thread 'main' panicked at 'assertion failed: `(left == right)`
+  left: `10`,
+ right: `20`: a and b should be equal', src/main.rs:5:5
+
    +
  1. assert_eq!() with debug data
  2. +
+
fn main() {
+    let a = 10;
+    let b = 20;
+
+    let c = 40;
+    
+    assert_eq!(a+b, c, "a = {} ; b = {}", a, b);
+}
+
+// -------------- Compile-time error --------------
+thread 'main' panicked at 'assertion failed: `(left == right)`
+  left: `30`,
+ right: `40`: a = 10 ; b = 20', src/main.rs:7:5
+

debug_assert!(), debug_assert_eq!(), debug_assert_ne!()

+

πŸ”Ž These are similar to above assert macros. But these statements are only enabled in non optimized builds by default. All these debug_assert macros will be omitted in release builds, unless we pass -C debug-assertions to the compiler.

+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + οΉ€ Previous + + + + Next οΉ₯ + + +
+
+ + +
+ +
+
πŸ§‘β€πŸ’»Built by and copyrightDumindu MadunuwanπŸ“… 2016-2023πŸš€ GitHub
+
+ +
+
+
+ +
+ +
+ + + \ No newline at end of file diff --git a/docs/docs/primitive-data-types/index.html b/docs/docs/primitive-data-types/index.html new file mode 100644 index 0000000..c39950c --- /dev/null +++ b/docs/docs/primitive-data-types/index.html @@ -0,0 +1,791 @@ + + + + + + + + + + + + + Primitive Data Types Β· Learning Rust + + + + + + + + + + + + + + +
+ + + +
+
+ +
+ +
+
+ +
+

Primitive Data Types

+

+
+
+
    +
  • +

    bool

    +
  • +
+

true or false

+
let x = true;
+let y: bool = false;
+
+// ⭐️ no TRUE, FALSE, 1, 0
+
    +
  • +

    char

    +
  • +
+

A single Unicode scalar value

+
let x = 'x';
+let y: char = '😎';
+
+// ⭐️ no "x", only single quotes
+

Because of Unicode support, char is not a single byte, but four(32 bits).

+
    +
  • +

    i8, i16, i32, i64, i128

    +
  • +
+

8, 16, 32, 64 and 128 bit fixed sized signed(+/-) integer types

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DATA TYPEMINMAX
i8-128127
i16-3276832767
i32-21474836482147483647
i64-92233720368547758089223372036854775807
i128-170141183460469231731687303715884105728170141183460469231731687303715884105727
+

πŸ’‘ The min and max values are based on the following equation; from -(2ⁿ⁻¹) to 2ⁿ⁻¹-1. You can use min_value() and max_value() functions to find min and max of each integer type. ex.i8::min_value();

+
let x = 10; // ⭐️ The default integer type in Rust is i32
+let y: i8 = -128;
+
    +
  • +

    u8, u16, u32, u64, u128

    +
  • +
+

8, 16, 32, 64 and 128 bit fixed sized unsigned(0/+) integer types

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DATA TYPEMINMAX
u80255
u16065535
u3204294967295
u64018446744073709551615
u1280340282366920938463463374607431768211455
+

πŸ’‘ The min and max values are based on the following equation; from 0 to 2ⁿ-1. Same way you can use min_value() and max_value() functions to find min and max of each integer type. ex.u8::max_value();

+
    +
  • +

    isize, usize

    +
  • +
+

Pointer sized signed and unsigned integer types

+

The actual bit size depends on the computer architecture you are compiling your program for. By default, the sizes are equal to 32 bits on 32-bit platforms and 64 bits on 64-bit platforms.

+
+

πŸ”Ž Search more about cross-compiling and supported tiers of Rust programs.

+
+
    +
  • +

    f32, f64

    +
  • +
+

32 and 64 bit sized floating point numbers(numbers with decimal points)

+

Rust follows IEEE Standard for Binary Floating-Point Arithmetic. The f32 type is similar to float(Single precision) in other languages, while f64 is similar to double(Double precision) in other languages.

+
let x = 1.5; // ⭐️ The default float type in Rust is f64
+let y: f64 = 2.0;
+

πŸ’‘ Should avoid using f32, unless you need to reduce memory consumption badly or if you are doing low-level optimization, when targeted hardware does not support for double-precision or when single-precision is faster than double-precision on it.

+
    +
  • +

    Array

    +
  • +
+

Fixed size list of elements of same data type

+
let a = [1, 2, 3];
+let a: [i32; 3] = [1, 2, 3]; // [Type; NO of elements]
+
+let b: [i32; 0] = []; // An empty array
+
+let mut c: [i32; 3] = [1, 2, 3];
+c[0] = 2;
+c[1] = 4;
+c[2] = 6;
+
+println!("{:?}", c); // [2, 4, 6]
+println!("{:#?}", c);
+//  [
+//      2,
+//      4,
+//      6,
+//  ]
+
+let d = [0; 5];   // [0, 0, 0, 0, 0]
+let e = ["x"; 5]; // ["x", "x", "x", "x", "x"]
+

⭐️ Arrays are immutable by default and even with mut, its element count cannot be changed.

+
+

πŸ”Ž If you are looking for a dynamic/ growable array, you can use vectors. Vectors can contain any type of elements but all elements must be in the same data type.

+
+
    +
  • +

    Tuple

    +
  • +
+

Fixed size ordered list of elements of different(or same) data types

+
let a = (1, 1.5, true, 'a');
+let a: (i32, f64, bool, char) = (1, 1.5, true, 'a');
+
+let mut b = (1, 1.5);
+b.0 = 2;
+b.1 = 3.0;
+
+println!("{:?}", b); // (2, 3.0)
+println!("{:#?}", b);
+// (
+//   2,
+//   3.0,
+// )
+
+let (c, d) = b; // c = 2, d = 3.0
+let (e, _, _, f) = a; // e = 1, f = 'a'
+
+let g = (0,); // single-element tuple
+let h = (b, (2, 4), 5); // ((2, 3.0), (2, 4), 5)
+

⭐️ Tuples are also immutable by default and even with mut, its element count cannot be changed. Also, if you want to change an element’s value, the new value should have the same data type of previous value.

+
    +
  • +

    Slice

    +
  • +
+

Dynamically-sized reference to another data structure

+

Imagine you want to get/ pass a part of an array or any other data structure. Instead of copying it to another array (or same data structure), Rust allows for creating a view/ reference to access only that part of the data. This view/ reference can be mutable or immutable.

+
let a: [i32; 4] = [1, 2, 3, 4]; // Parent Array
+
+let b: &[i32] = &a; // Slicing whole array
+let c = &a[0..4]; // From 0th position to 4th(excluding)
+let d = &a[..]; // Slicing whole array
+
+let e = &a[1..3]; // [2, 3]
+let f = &a[1..]; // [2, 3, 4]
+let g = &a[..3]; // [1, 2, 3]
+
    +
  • +

    str

    +
  • +
+

Unsized UTF-8 sequence of Unicode string slices

+
let a = "Hello, world."; // a: &'static str
+let b: &str = "こんにけは, δΈ–η•Œ!";
+

⭐️ It’s an immutable/ statically allocated slice holding an unknown sized sequence of UTF-8 code points stored in somewhere in memory. &str is used to borrow and assign the whole array to the given variable binding.

+
    +
  • +

    Function

    +
  • +
+

As we discussed in the functions section as well, p1 is a function pointer to plus_one() in the following code.

+
fn main() {
+    let p1: fn(i32) -> i32 = plus_one;
+    let x = p1(5); // 6
+}
+
+fn plus_one(a: i32) -> i32 {
+    a + 1
+}
+

πŸ‘¨β€πŸ« Before going to the next…

+
    +
  • In Rust, the default integer type is i32 and the default float type is f64.
  • +
+
let i = 10;   // Equals to `let i: i32 = 10;`
+let f = 3.14; // Equals to `let f: f64 = 3.14;`
+
    +
  • Other than adding the type annotations to the variables, for numeric types, we can append the data type directly to the value as the suffix. Also, to improve the readability of long numbers, we can use _ as a divider.
  • +
+
let a = 5i8; // Equals to `let a: i8 = 5;`
+
+let b = 100_000_000; // Equals to `let b = 100000000;`
+// πŸ’‘ The placements of _s are not strict. ex. 10000_0000 is also valid.
+
+let pi = 3.141_592_653_59f64; // Equals to `let pi: f64 = 3.14159265359`
+
+const PI: f64 = 3.141_592_653_59; // In the constants and statics, the data type must be annotated in the beginning.
+
    +
  • +

    There are several string types in Rust. The String type is a heap-allocated string. This string is growable and is also guaranteed to be UTF-8. In general, you should use String when you need ownership, and &str when you just need to borrow a string.

    +
  • +
  • +

    A String type can be generated from a &str type, via the to_string() or String::from() methods. With as_str() method, a String type can be converted to a &str type.

    +
  • +
+
let s: &str = "Hello"; // &str
+
+let s = s.to_string(); // String
+let s = String::from(s); // String
+
+let s = s.as_str(); // &str
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + οΉ€ Previous + + + + Next οΉ₯ + + +
+
+ + +
+ +
+
πŸ§‘β€πŸ’»Built by and copyrightDumindu MadunuwanπŸ“… 2016-2023πŸš€ GitHub
+
+ +
+
+
+ +
+ +
+ + + \ No newline at end of file diff --git a/docs/docs/rust_playground.png b/docs/docs/rust_playground.png new file mode 100644 index 0000000000000000000000000000000000000000..5833453e8c4d448805c198c8d408db7194a08146 GIT binary patch literal 27723 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 znP½oxvS4J9zmW09j$#viA&BZ)C5FQ*8jBp9uD|U2HEWMYD+yFqsT zys&=!S|N#_{Q09H1E`H;T^cPGp{}leQ)D@SlKpEI)+qv^rQj4P1vV>H0f9vpe-Gel zEZEgka7Rf8q-;|O_snWzwtGAjWRT4bKrZHDdFu*6a({z(rKYar_Nb4F3twUBeNJr17mGAC2G`bOF4LWtRI)!SsrY@x%7&lfo(mbc<5f` z`q_BgKDz-3puk9u-;WW|RQAlk+ggIR)0_6hf6@s8wBCUiEh(o~a8#&a7R#`v%oX<# zT)|b7ZVd;oVLn|i;nWcQiXQF>hP&RL==x|t)Q!{AC`L!uaXLI^L+a)CV3dY?vX$T0 ztF{~zXluR=Lu@saBW*&yt&FVGyClrym6jj4d_whH`gFMdzP6dsYul)d5^w->LYMux z2|_~S7v-@>JmIwsEdVwikwTXre+UaphM+)V3qj>Er@~CSv}3^X*&uEs@%;!ugeD~? zblI~MI`HQ0TOc~)=+snK7asbsW~>dw&0}EUDyfwI?5oVpRl=E>18lK5jl8?krH$gv z(*xpyc#p<+^ki6kBcpf3V*OQ7s}Z}Uz^Pq%3??X2ZG<8eT~*bdl^+amP4p_};nvJ% z)u`mh)6XuHK)xMrwuKZQUVXkCp;CO{*zw_sr1)}rx;;x`5IjzjwB%%0D!UWwvzA7% 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 a%C~q+K5cIHq!+3_ujdZ@_KI!$kN*<_l|IV= literal 0 HcmV?d00001 diff --git a/docs/docs/smart-compiler/index.html b/docs/docs/smart-compiler/index.html new file mode 100644 index 0000000..a637575 --- /dev/null +++ b/docs/docs/smart-compiler/index.html @@ -0,0 +1,757 @@ + + + + + + + + + + + + + Smart Compiler Β· Learning Rust + + + + + + + + + + + + + + +
+ + + +
+
+ +
+ +
+
+ +
+

Smart Compiler

+

+
+
+

Why Compiler?

+

The Rust compiler does the most significant job to prevent errors in Rust programs. It analyzes the code at compile-time and issues warnings, if the code does not follow memory management rules or lifetime annotations correctly.

+

For example,

+
#[allow(unused_variables)] //πŸ’‘ A lint attribute used to suppress the warning; unused variable: `b`
+fn main() {
+    let a = vec![1, 2, 3];
+    let b = a;
+
+    println!("{:?}", a);
+}
+
+
+// ------ Compile-time error ------
+error[E0382]: use of moved value: `a`
+ --> src/main.rs:6:22
+  |
+3 |     let b = a;
+  |         - value moved here
+4 |
+5 |     println!("{:?}", a);
+  |                      ^ value used here after move
+  |
+  = note: move occurs because `a` has type `std::vec::Vec<i32>`, which does not implement the `Copy` trait
+
+error: aborting due to previous error
+For more information about this error, try `rustc --explain E0382`.
+
+// ⭐ instead using #[allow(unused_variables)], consider using "let _b = a;" in line 4. 
+// Also you can use "let _ =" to completely ignore return values
+
+

πŸ’­ In the previous sections, we have discussed memory management concepts like ownership, borrowing, lifetimes and etc.

+
+

Rust compiler checks not only issues related with lifetimes or memory management and also common coding mistakes, like the following code.

+
struct Color {
+    r: u8,
+    g: u8,
+    b: u8,
+}
+
+fn main() {
+    let yellow = Color {
+        r: 255,
+        g: 255,
+        d: 0,
+    };
+
+    println!("Yellow = rgb({},{},{})", yellow.r, yellow.g, yellow.b);
+}
+
+
+// ------------ Compile-time error ------------
+error[E0560]: struct `Color` has no field named `d`
+  --> src/main.rs:11:9
+   |
+11 |         d: 0,
+   |         ^ field does not exist - did you mean `b`?
+
+error: aborting due to previous error
+For more information about this error, try `rustc --explain E0560`.
+

Explain Error Codes

+

Above error messages are very descriptive and we can easily see where is the error. But while we can not identify the issue via the error message, rustc --explain commands help us to identify the error type and how to solve it, by showing simple code samples which express the same problem and the solution we have to use.

+

For example, rustc --explain E0571 shows the following output in the console.

+
A `break` statement with an argument appeared in a non-`loop` loop.
+
+Example of erroneous code:
+ο½€ο½€ο½€
+let result = while true {
+    if satisfied(i) {
+        break 2*i; // error: `break` with value from a `while` loop
+    }
+    i += 1;
+};
+ο½€ο½€ο½€
+
+The `break` statement can take an argument (which will be the value of the loop
+expression if the `break` statement is executed) in `loop` loops, but not
+`for`, `while`, or `while let` loops.
+
+Make sure `break value;` statements only occur in `loop` loops:
+ο½€ο½€ο½€
+let result = loop { // ok!
+    if satisfied(i) {
+        break 2*i;
+    }
+    i += 1;
+};
+ο½€ο½€ο½€
+

πŸ’‘ Also you can read the same explanations via Rust Compiler Error Index. For example to check the explanation of E0571 error, you can use https://doc.rust-lang.org/error-index.html#E0571.

+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + οΉ€ Previous + + + + Next οΉ₯ + + +
+
+ + +
+ +
+
πŸ§‘β€πŸ’»Built by and copyrightDumindu MadunuwanπŸ“… 2016-2023πŸš€ GitHub
+
+ +
+
+
+ +
+ +
+ + + \ No newline at end of file diff --git a/docs/docs/std-primitives-and-preludes/index.html b/docs/docs/std-primitives-and-preludes/index.html new file mode 100644 index 0000000..987d75b --- /dev/null +++ b/docs/docs/std-primitives-and-preludes/index.html @@ -0,0 +1,791 @@ + + + + + + + + + + + + + STD, Primitives and Preludes Β· Learning Rust + + + + + + + + + + + + + + +
+ + + +
+
+ +
+ +
+
+ +
+

STD, Primitives and Preludes

+

+
+
+

⭐️ In Rust, language elements are implemented by not only std library crate but also compiler as well. Examples,

+
    +
  • Primitives: Defined by the compiler and methods are implemented by std library directly on primitives.
  • +
  • Standard Macros: Defined by both compiler and std
  • +
+

The std library has been divided into modules, according to the main areas each covered.

+

⭐️ While primitives are implemented by the compiler, the standard library implements the most useful methods directly on the primitive types. But some rarely useful language elements of some primitives are stored on relevant std modules. This is why you can see char, str and integer types on both primitives and std modules.

+

Primitives

+
// Primitives: Defined by the compiler and methods are directly implemented by std
+bool, char, slice, str
+
+i8, i16, i32, i64, i128, isize
+u8, u16, u32, u64, u128, usize
+
+f32, f64
+
+array, tuple
+
+pointer, fn, reference
+

Standard Macros

+
// Standard Macros also defined by both compiler and std
+print, println, eprint, eprintln
+format, format_args
+write, writeln
+
+concat, concat_idents, stringify // concat_idents: nightly-only experimental API
+
+include, include_bytes, include_str
+
+assert, assert_eq, assert_ne
+debug_assert, debug_assert_eq, debug_assert_ne
+
+try, panic, compile_error, unreachable, unimplemented
+
+file, line, column, module_path
+env, option_env
+cfg
+
+select, thread_local // select: nightly-only experimental API
+
+vec
+

Std Modules

+
// std modules
+char, str
+
+i8, i16, i32, i64, i128, isize
+u8, u16, u32 ,u64, u128, usize
+f32, f64
+num
+
+vec, slice, hash, heap, collections // heap: nightly-only experimental API
+
+string, ascii, fmt
+
+default
+
+marker, clone, convert, cmp, iter
+
+ops, ffi
+
+option, result, panic, error
+
+io
+fs, path
+mem, thread, sync
+process, env
+net
+time
+os
+
+ptr, boxed, borrow, cell, any, rc
+
+prelude
+
+intrinsics // intrinsics: nightly-only experimental API
+raw // raw: nightly-only experimental API
+
+

πŸ”Ž When examining Rust’s source code, you can see that the src directory is a workspace. Even though it is having many library crates, by examining root Cargo.toml file you can easily identify that main crates are rustc(compiler) and libstd (std). In libstd/lib.rs std modules have been re-exported via pub use and the original location of most of the std modules is src/libcore.

+
+

Few important std modules are,

+
    +
  • std::io - Core I/O functionality
  • +
  • std::fs - Filesystem specific functionality
  • +
  • std::path - Cross-platform path specific functionality
  • +
  • std::env - Process’s environment related functionality
  • +
  • std::mem - Memory related functionality
  • +
  • std::net - TCP/UDP communication
  • +
  • std::os - OS specific functionality
  • +
  • std::thread - Native threads specific functionality
  • +
  • std::collections - Core Collection types
  • +
+
+

πŸ’― Refer Rust Standard Library Documentation for more details.

+
+

Preludes

+

Even though Rust std contains many modules, by default it doesn’t load each and everything of std library on every rust program. Instead, it loads only the smallest list of things which require for almost every single Rust program. These are called preludes. They import only,

+
// Reexported core operators
+pub use marker::{Copy, Send, Sized, Sync};
+pub use ops::{Drop, Fn, FnMut, FnOnce};
+
+// Reexported functions
+pub use mem::drop;
+
+// Reexported types and traits
+pub use boxed::Box;
+pub use borrow::ToOwned;
+pub use clone::Clone;
+pub use cmp::{PartialEq, PartialOrd, Eq, Ord};
+pub use convert::{AsRef, AsMut, Into, From};
+pub use default::Default;
+pub use iter::{Iterator, Extend, IntoIterator};
+pub use iter::{DoubleEndedIterator, ExactSizeIterator};
+pub use option::Option::{self, Some, None};
+pub use result::Result::{self, Ok, Err};
+pub use slice::SliceConcatExt;
+pub use string::{String, ToString};
+pub use vec::Vec;
+
+

Preludes have been imported explicitly on libstd/lib.rs and the whole list can be seen on libstd/prelude/v1.rs.

+
+

⭐️ So technically, Rust inserts,

+
    +
  • extern crate std; : into the crate root of every crate
  • +
  • use std::prelude::v1::*; : into every module +So you don’t need to import these each time.
  • +
+

The concept of preludes is quite common on Rust libraries. Even some modules inside std crate (ex.std::io) and many libraries (ex. Diesel) are having their own prelude modules.

+

⭐️ But preludes are used to create a single place to import all important components which are required while using the library. They do not load automatically unless you imported them manually. Only std::prelude imports automatically in every Rust programs.

+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + οΉ€ Previous + + + + Next οΉ₯ + + +
+
+ + +
+ +
+
πŸ§‘β€πŸ’»Built by and copyrightDumindu MadunuwanπŸ“… 2016-2023πŸš€ GitHub
+
+ +
+
+
+ +
+ +
+ + + \ No newline at end of file diff --git a/docs/docs/structs/index.html b/docs/docs/structs/index.html new file mode 100644 index 0000000..128ac5c --- /dev/null +++ b/docs/docs/structs/index.html @@ -0,0 +1,660 @@ + + + + + + + + + + + + + Structs Β· Learning Rust + + + + + + + + + + + + + + +
+ + + +
+
+ +
+ +
+
+ +
+

Structs

+

+
+
+

⭐️ Structs are used to encapsulate related properties into one unified data type.

+

πŸ’‘ By convention, the name of the struct should follow PascalCase.

+

There are 3 variants of structs,

+
    +
  1. C-like structs
  2. +
+
    +
  • One or more comma-separated name:value pairs
  • +
  • Brace-enclosed list
  • +
  • Similar to classes (without its methods) in OOP languages
  • +
  • Because fields have names, we can access them through dot notation
  • +
+
    +
  1. Tuple structs
  2. +
+
    +
  • One or more comma-separated values
  • +
  • A parenthesized list like tuples
  • +
  • Looks like a named tuples
  • +
+
    +
  1. Unit structs
  2. +
+
    +
  • A struct with no members at all
  • +
  • It defines a new type but it resembles an empty tuple, ()
  • +
  • Rarely in use, useful with generics
  • +
+

⭐️ When regarding OOP in Rust, attributes and methods are placed separately on structs and traits. Structs contain only attributes, traits contain only methods. They are getting connected via impls.

+
+

πŸ’‘More complex examples can be found on impls & traits, lifetimes and modules sections.

+
+

C-like structs

+
// Struct Declaration
+struct Color {
+    red: u8,
+    green: u8,
+    blue: u8
+}
+
+fn main() {
+  // Creating an instance
+  let black = Color {red: 0, green: 0, blue: 0};
+
+  // Accessing its fields using dot notation
+  println!("Black = rgb({}, {}, {})", black.red, black.green, black.blue); //Black = rgb(0, 0, 0)
+
+  // Structs are immutable by default, use `mut` to make it mutable but doesn't support field level mutability
+  let mut link_color = Color {red: 0,green: 0,blue: 255};
+  link_color.blue = 238;
+  println!("Link Color = rgb({}, {}, {})", link_color.red, link_color.green, link_color.blue); //Link Color = rgb(0, 0, 238)
+
+  // Copy elements from another instance
+  let blue = Color {blue: 255, .. link_color};
+  println!("Blue = rgb({}, {}, {})", blue.red, blue.green, blue.blue); //Blue = rgb(0, 0, 255)
+
+  // Destructure the instance using a `let` binding, this will not destruct blue instance
+  let Color {red: r, green: g, blue: b} = blue;
+  println!("Blue = rgb({}, {}, {})", r, g, b); //Blue = rgb(0, 0, 255)
+
+  // Creating an instance via functions & accessing its fields
+  let midnightblue = get_midnightblue_color();
+  println!("Midnight Blue = rgb({}, {}, {})", midnightblue.red, midnightblue.green, midnightblue.blue); //Midnight Blue = rgb(25, 25, 112)
+
+  // Destructure the instance using a `let` binding
+  let Color {red: r, green: g, blue: b} = get_midnightblue_color();
+  println!("Midnight Blue = rgb({}, {}, {})", r, g, b); //Midnight Blue = rgb(25, 25, 112)
+}
+
+fn get_midnightblue_color() -> Color {
+    Color {red: 25, green: 25, blue: 112}
+}
+

Tuple structs

+

⭐️ When a tuple struct has only one element, we call it newtype pattern. Because it helps to create a new type.

+
struct Color(u8, u8, u8);
+struct Kilometers(i32);
+
+fn main() {
+  // Creating an instance
+  let black = Color(0, 0, 0);
+
+  // Destructure the instance using a `let` binding, this will not destruct black instance
+  let Color(r, g, b) = black;
+  println!("Black = rgb({}, {}, {})", r, g, b); //black = rgb(0, 0, 0);
+
+  // Newtype pattern
+  let distance = Kilometers(20);
+  // Destructure the instance using a `let` binding
+  let Kilometers(distance_in_km) = distance;
+  println!("The distance: {} km", distance_in_km); //The distance: 20 km
+}
+

Unit structs

+

This is rarely useful on its own. But in combination with other features, it can become useful.

+
+

πŸ“– ex: A library may ask you to create a structure that implements a certain trait to handle events. If you don’t have any data you need to store in the structure, you can create a unit-like struct.

+
+
struct Electron;
+
+fn main() {
+  let x = Electron;
+}
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + οΉ€ Previous + + + + Next οΉ₯ + + +
+
+ + +
+ +
+
πŸ§‘β€πŸ’»Built by and copyrightDumindu MadunuwanπŸ“… 2016-2023πŸš€ GitHub
+
+ +
+
+
+ +
+ +
+ + + \ No newline at end of file diff --git a/docs/docs/unwrap-and-expect/index.html b/docs/docs/unwrap-and-expect/index.html new file mode 100644 index 0000000..f58dd7e --- /dev/null +++ b/docs/docs/unwrap-and-expect/index.html @@ -0,0 +1,880 @@ + + + + + + + + + + + + + Unwrap and Expect Β· Learning Rust + + + + + + + + + + + + + + +
+ + + +
+
+ +
+ +
+
+ +
+

Unwrap and Expect

+

+
+
+

unwrap()

+
    +
  • If an Option type has Some value or a Result type has a Ok value, the value inside them passes to the next step.
  • +
  • If the Option type has None value or the Result type has Err value, program panics; If Err, panics with the error message.
  • +
+

The functionality is bit similar to the following codes, which are using match instead unwrap().

+

Example with Option and match, before using unwrap()

+
fn main() {
+    let x;
+    match get_an_optional_value() {
+        Some(v) => x = v, // if Some("abc"), set x to "abc"
+        None => panic!(), // if None, panic without any message
+    }
+
+    println!("{}", x); // "abc" ; if you change line 14 `false` to `true`
+}
+
+fn get_an_optional_value() -> Option<&'static str> {
+
+    //if the optional value is not empty
+    if false {
+        return Some("abc");
+    }
+    
+    //else
+    None
+}
+
+
+// --------------- Compile-time error ---------------
+thread 'main' panicked at 'explicit panic', src/main.rs:5:17
+

Example with Result and match, before using unwrap()

+
fn main() {
+    let x;
+    match function_with_error() {
+        Ok(v) => x = v, // if Ok(255), set x to 255
+        Err(e) => panic!(e), // if Err("some message"), panic with error message "some message"
+    }
+
+    println!("{}", x); // 255 ; if you change line 13 `true` to `false`
+}
+
+fn function_with_error() -> Result<u64, String> {
+    //if error happens
+    if true {
+        return Err("some message".to_string());
+    }
+
+    // else, return valid output
+    Ok(255)
+}
+
+
+// ---------- Compile-time error ----------
+thread 'main' panicked at 'some message', src/main.rs:5:19
+

Same codes in above main functions can be written with unwrap() using two lines.

+
// 01. unwrap error message for None
+fn main() {
+    let x = get_an_optional_value().unwrap();
+
+    println!("{}", x);
+}
+
+// --------------- Compile-time error ---------------
+thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', libcore/option.rs:345:21
+
+
+// 02. unwrap error message for Err
+fn main() {
+    let x = function_with_error().unwrap();
+
+    println!("{}", x);
+}
+
+// --------------- Compile-time error ---------------
+thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: "some message"', libcore/result.rs:945:5
+

⭐ But as you can see, when using unwrap() error messages are not showing the exact line numbers where the panic happens.

+

expect()

+

Similar to unwrap() but can set a custom message for the panics.

+
// 01. expect error message for None
+fn main() {
+    let n: Option<i8> = None;
+    
+    n.expect("empty value returned");
+}
+
+// --------------- Compile-time error ---------------
+thread 'main' panicked at 'empty value returned', libcore/option.rs:989:5
+
+
+// 02. expect error message for Err
+fn main() {
+    let e: Result<i8, &str> = Err("some message");
+
+    e.expect("expect error message");
+}
+
+// --------------- Compile-time error ---------------
+thread 'main' panicked at 'expect error message: "some message"', libcore/result.rs:945:5
+

unwrap_err() and expect_err() for Result types

+

The opposite case of unwrap() and expect(); Panics with Ok values, instead Err. Both print the value inside Ok on the error message.

+

πŸ’‘ Usually use with tests.

+
// 01. unwrap_err error message for Ok
+fn main() {
+    let o: Result<i8, &str> = Ok(8);
+
+    o.unwrap_err();
+}
+
+// ---------- Compile-time error ----------
+thread 'main' panicked at 'called `Result::unwrap_err()` on an `Ok` value: 8', libcore/result.rs:945:5
+
+
+// 02. expect_err error message for Ok
+fn main() {
+    let o: Result<i8, &str> = Ok(8);
+
+    o.expect_err("Should not get Ok value");
+}
+
+// ---------- Compile-time error ----------
+thread 'main' panicked at 'Should not get Ok value: 8', libcore/result.rs:945:5
+

unwrap_or(), unwrap_or_default() and unwrap_or_else()

+
+

πŸ’‘ These are bit similar to unwrap(), If an Option type has Some value or a Result type has a Ok value, the value inside them passes to the next step. But when having None or Err, the functionalities are bit different.

+
+
    +
  • unwrap_or()Β : With None or Err, the value you passes to unwrap_or() is passing to the next step. But the data type of the value you passes should match with the data type of the relevant Some or Ok.
  • +
+
fn main() {
+    let v1 = 8;
+    let v2 = 16;
+
+    let s_v1 = Some(8);
+    let n = None;
+
+    assert_eq!(s_v1.unwrap_or(v2), v1); // Some(v1) unwrap_or v2 = v1
+    assert_eq!(n.unwrap_or(v2), v2);    // None unwrap_or v2 = v2
+
+    let o_v1: Result<i8, &str> = Ok(8);
+    let e: Result<i8, &str> = Err("error");
+
+    assert_eq!(o_v1.unwrap_or(v2), v1); // Ok(v1) unwrap_or v2 = v1
+    assert_eq!(e.unwrap_or(v2), v2);    // Err unwrap_or v2 = v2
+}
+
    +
  • unwrap_or_default()Β : With None or Err, the default value of the data type of the relevant Some or Ok, is passing to the next step.
  • +
+
fn main() {
+    let v = 8;
+    let v_default = 0;
+
+    let s_v: Option<i8> = Some(8);
+    let n: Option<i8> = None;
+
+    assert_eq!(s_v.unwrap_or_default(), v);       // Some(v) unwrap_or_default = v
+    assert_eq!(n.unwrap_or_default(), v_default); // None unwrap_or_default = default value of v
+
+    let o_v: Result<i8, &str> = Ok(8);
+    let e: Result<i8, &str> = Err("error");
+
+    assert_eq!(o_v.unwrap_or_default(), v);       // Ok(v) unwrap_or_default = v
+    assert_eq!(e.unwrap_or_default(), v_default); // Err unwrap_or_default = default value of v
+}
+
    +
  • unwrap_or_else()Β : Similar to unwrap_or(). The only difference is, instead of passing a value, you have to pass a closure which returns a value with the same data type of the relevant Some or Ok.
  • +
+
fn main() {
+    let v1 = 8;
+    let v2 = 16;
+
+    let s_v1 = Some(8);
+    let n = None;
+    let fn_v2_for_option = || 16;
+
+    assert_eq!(s_v1.unwrap_or_else(fn_v2_for_option), v1); // Some(v1) unwrap_or_else fn_v2 = v1
+    assert_eq!(n.unwrap_or_else(fn_v2_for_option), v2);    // None unwrap_or_else fn_v2 = v2
+
+    let o_v1: Result<i8, &str> = Ok(8);
+    let e: Result<i8, &str> = Err("error");
+    let fn_v2_for_result = |_| 16;
+
+    assert_eq!(o_v1.unwrap_or_else(fn_v2_for_result), v1); // Ok(v1) unwrap_or_else fn_v2 = v1
+    assert_eq!(e.unwrap_or_else(fn_v2_for_result), v2);    // Err unwrap_or_else fn_v2 = v2
+}
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + οΉ€ Previous + + + + Next οΉ₯ + + +
+
+ + +
+ +
+
πŸ§‘β€πŸ’»Built by and copyrightDumindu MadunuwanπŸ“… 2016-2023πŸš€ GitHub
+
+ +
+
+
+ +
+ +
+ + + \ No newline at end of file diff --git a/docs/docs/use/index.html b/docs/docs/use/index.html new file mode 100644 index 0000000..1f14027 --- /dev/null +++ b/docs/docs/use/index.html @@ -0,0 +1,761 @@ + + + + + + + + + + + + + Use Β· Learning Rust + + + + + + + + + + + + + + +
+ + + +
+
+ +
+ +
+
+ +
+

Use

+

+
+
+

Let’s see the main usages of the use keyword.

+

01. Bind a full path to a new name

+

Mainly use keyword is used to bind a full path of an element to a new name. So the user doesn’t want to repeat the full path each time.

+
// -- Initial code without the `use` keyword --
+mod phrases { 
+  pub mod greetings { 
+    pub fn hello() { 
+      println!("Hello, world!");
+    }
+  }
+}
+
+fn main() { 
+  phrases::greetings::hello(); // Using full path
+}
+
+
+// -- Usage of the `use` keyword --
+// 01. Create an alias for module
+use phrases::greetings;
+fn main() { 
+  greetings::hello();
+}
+
+// 02. Create an alias for module elements
+use phrases::greetings::hello;
+fn main() { 
+  hello();
+}
+
+// 03. Customize names with the `as` keyword
+use phrases::greetings::hello as greet;
+fn main() { 
+  greet();
+}
+

02. Import elements to scope

+

Another common usage of use is importing elements to scope. Remember that, this is also a bit similar to creating an alias and using it instead of using the full path.

+
fn hello() -> String {
+  "Hello, world!".to_string()
+}
+
+#[cfg(test)]
+mod tests {
+  use super::hello; // Import the `hello()` function into the scope
+    
+  #[test]
+  fn test_hello() {
+    assert_eq!("Hello, world!", hello()); // If not using the above `use` statement, we can run same via `super::hello()`
+  }
+}
+
+

πŸ’‘ By default, use declarations use absolute paths, starting from the crate root. But self and super declarations make that path relative to the current module.

+
+

Same way the use keyword is used to import the elements of other crates including the std, Rust’s Standard Library.

+
// -- 01. Importing elements --
+use std::fs::File;
+
+fn main() {
+    File::create("empty.txt").expect("Can not create the file!");
+}
+
+
+// -- 02. Importing module and elements --
+use std::fs::{self, File} // `use std::fs; use std::fs::File;`
+
+fn main() {
+    fs::create_dir("some_dir").expect("Can not create the directry!");
+    File::create("some_dir/empty.txt").expect("Can not create the file!");
+}
+
+
+// -- 03. Importing multiple elements --
+use std::fs::File;
+use std::io::{BufReader, BufRead}; // `use std::io::BufReader; use std::io::BufRead;`
+
+fn main() {
+    let file = File::open("src/hello.txt").expect("file not found");
+    let buf_reader = BufReader::new(file);
+
+    for line in buf_reader.lines() {
+        println!("{}", line.unwrap());
+    }
+}
+
+

We don’t need to use extern crate std; when using the std library. We will discuss more about this under the Standard Library section.

+
+

πŸ’‘ use statements import only what we’ve specified into the scope, instead of importing all elements of a module or crate. So it improves the efficiency of the program.

+

03. Re-exporting

+

Another special case is pub use. When creating a module, you can export things from another module into your module. So after that, they can be accessed directly from your module. This is called re-exporting.

+
// ↳ main.rs
+mod phrases;
+
+fn main() {
+    phrases::hello(); // Not directly map
+}
+
+// ↳ phrases/mod.rs
+pub mod greetings;
+
+pub use self::greetings::hello; // Re-export `greetings::hello` to phrases
+
+// ↳ phrases/greetings.rs
+pub fn hello() {
+  println!("Hello, world!");
+}
+

This pattern is quite common in large libraries. It helps to hide the complexity of the internal module structure of the library from users. Because users don’t need to know/follow the whole directory map of the elements of the library while working with them.

+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + οΉ€ Previous + + + + Next οΉ₯ + + +
+
+ + +
+ +
+
πŸ§‘β€πŸ’»Built by and copyrightDumindu MadunuwanπŸ“… 2016-2023πŸš€ GitHub
+
+ +
+
+
+ +
+ +
+ + + \ No newline at end of file diff --git a/docs/docs/variable-bindings-constants-and-statics/index.html b/docs/docs/variable-bindings-constants-and-statics/index.html new file mode 100644 index 0000000..e750160 --- /dev/null +++ b/docs/docs/variable-bindings-constants-and-statics/index.html @@ -0,0 +1,581 @@ + + + + + + + + + + + + + Variable bindings, Constants & Statics Β· Learning Rust + + + + + + + + + + + + + + +
+ + + +
+
+ +
+ +
+
+ +
+

Variable bindings, Constants & Statics

+

+
+
+

Variable bindings, Constants & Statics

+

⭐️ In Rust, variables are immutable by default, so we call them Variable bindings. To make them mutable, the mut keyword is used.

+

⭐️ Rust is a statically typed language; it checks data types at compile-time. But it doesn’t require you to actually type it when declaring variable bindings. In that case, the compiler checks the usage and sets a better data type for it. But for constants and statics, you must annotate the type. Types come after a colon(:).

+
+

πŸ’­ In the following examples, we will use data types like bool, i32, i64 and f64. Don’t worry about them for now; they’ll be discussed later.

+
+
    +
  • Variable bindings
  • +
+

The let keyword is used in binding expressions. We can bind a name to a value or a function. Also, because the left-hand side of a let expression is a “pattern”, you can bind multiple names to a set of values or function values.

+
let a; // Declaration; without data type
+a = 5; // Assignment
+
+let b: i8; // Declaration; with data type 
+b = 5;
+
+let t = true;        // Declaration + assignment; without data type
+let f: bool = false; // Declaration + assignment; with data type
+
+let (x, y) = (1, 2); // x = 1 and y = 2
+
+let mut z = 5;
+z = 6;
+
+let z = { x + y }; // z = 3
+
+let z = {
+    let x = 1;
+    let y = 2;
+
+    x + y
+}; // z = 3
+
    +
  • Constants
  • +
+

The const keyword is used to define constants and after the assignment their values are not allowed to change. They live for the entire lifetime of a program but has no fixed address in the memory.

+
const N: i32 = 5;
+
    +
  • Statics
  • +
+

The static keyword is used to define a “global variable” type facility. There is only one instance for each value, and it’s at a fixed location in memory.

+
static N: i32 = 5;
+
+

πŸ’­ While you need constants, always use const, instead of static. It’s pretty rare that you actually want a memory location associated with your constant, and using a const allows for optimizations like constant propagation, not only in your crate but also in downstream crates.

+
+

Variable Shadowing

+

Sometimes, while dealing with data, initially we get them in one unit but need to transform them into another unit for further processing. In this situation, instead of using different variable names, Rust allows us to redeclare the same variable with a different data type and/ or with a different mutability setting. We call this Shadowing.

+
fn main() {
+    let x: f64 = -20.48; // float
+    let x: i64 = x.floor() as i64; // int
+    println!("{}", x); // -21
+
+    let s: &str = "hello"; // &str
+    let s: String = s.to_uppercase(); // String
+    println!("{}", s) // HELLO
+}
+

πŸ‘¨β€πŸ« Before going to the next…

+
    +
  • +

    The naming convention for the variable bindings is using the snake_case. But, for constants and statics, we should follow the SCREAMING_SNAKE_CASE.

    +
  • +
  • +

    Usually, constants and statics are placed at the top of the code file, outside the functions (after module imports/ use declarations).

    +
  • +
+
const PI: f64 = 3.14159265359;
+
+fn main() {
+    println!("Ο€ value is {}", PI);
+}
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + οΉ€ Previous + + + + Next οΉ₯ + + +
+
+ + +
+ +
+
πŸ§‘β€πŸ’»Built by and copyrightDumindu MadunuwanπŸ“… 2016-2023πŸš€ GitHub
+
+ +
+
+
+ +
+ +
+ + + \ No newline at end of file diff --git a/docs/docs/vectors/index.html b/docs/docs/vectors/index.html new file mode 100644 index 0000000..7cce574 --- /dev/null +++ b/docs/docs/vectors/index.html @@ -0,0 +1,614 @@ + + + + + + + + + + + + + Vectors Β· Learning Rust + + + + + + + + + + + + + + +
+ + + +
+
+ +
+ +
+
+ +
+

Vectors

+

+
+
+

If you remember, the array is a fixed-size list of elements, of the same data type. Even with mut, its element count cannot be changed. A vector is kind of a re-sizable array but all elements must be in the same type.

+

⭐️ It’s a generic type, written as Vec<T>Β . T can have any type, ex. The type of a Vec of i32s is Vec<i32>. Also, Vectors always allocate their data in a dynamically allocated heap.

+

Create empty vector

+
let mut a = Vec::new(); //1.With new() keyword
+let mut b = vec![]; //2.Using the vec! macro
+

Create with data types

+
let mut a2: Vec<i32> = Vec::new();
+let mut b2: Vec<i32> = vec![];
+let mut b3 = vec![1i32, 2, 3];//Suffixing 1st value with data type
+
+let mut b4 = vec![1, 2, 3];
+let mut b5: Vec<i32> = vec![1, 2, 3];
+let mut b6  = vec![1i32, 2, 3];
+let mut b7 = vec![0; 10]; //Ten zeroes
+

Access and change data

+
//Accessing and changing existing data
+let mut c = vec![5, 4, 3, 2, 1];
+c[0] = 1;
+c[1] = 2;
+//c[6] = 2; Cannot assign values this way, index out of bounds
+println!("{:?}", c); //[1, 2, 3, 2, 1]
+
+//push and pop
+let mut d: Vec<i32> = Vec::new();
+d.push(1); //[1] : Add an element to the end
+d.push(2); //[1, 2]
+d.pop(); //[1] : : Remove an element from the end
+
+
+// πŸ”Ž Capacity and reallocation
+let mut e: Vec<i32> = Vec::with_capacity(10);
+println!("Length: {}, Capacity : {}", e.len(), e.capacity()); //Length: 0, Capacity : 10
+
+// These are all done without reallocating...
+for i in 0..10 {
+    e.push(i);
+}
+// ...but this may make the vector reallocate
+e.push(11);
+

⭐️ Mainly a vector represent 3 things,

+
    +
  • A pointer to the data
  • +
  • No of elements currently have(length)
  • +
  • Capacity (Amount of space allocated for any future elements).
  • +
+

If the length of a vector exceeds its capacity, its capacity will be increased automatically. But its elements will be reallocated(which can be slow). So always use Vec::with_capacity whenever it’s possible.

+
+

πŸ’‘ The String data type is a UTF-8 encoded vector. But you can not index into a String because of encoding.

+
+

πŸ’― Vectors can be used with iterators in three ways,

+
let mut v = vec![1, 2, 3, 4, 5];
+
+for i in &v {
+    println!("A reference to {}", i);
+}
+
+for i in &mut v {
+    println!("A mutable reference to {}", i);
+}
+
+for i in v {
+    println!("Take ownership of the vector and its element {}", i);
+}
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + οΉ€ Previous + + + + Next οΉ₯ + + +
+
+ + +
+ +
+
πŸ§‘β€πŸ’»Built by and copyrightDumindu MadunuwanπŸ“… 2016-2023πŸš€ GitHub
+
+ +
+
+
+ +
+ +
+ + + \ No newline at end of file diff --git a/docs/docs/why-rust/index.html b/docs/docs/why-rust/index.html new file mode 100644 index 0000000..1131d2b --- /dev/null +++ b/docs/docs/why-rust/index.html @@ -0,0 +1,514 @@ + + + + + + + + + + + + + Why Rust? Β· Learning Rust + + + + + + + + + + + + + + +
+ + + +
+
+ +
+ +
+
+ +
+

Why Rust?

+

+
+
+

History of Rust

+

Rust was initially designed and developed by former Mozilla employee Graydon Hoare as a personal project. Mozilla began sponsoring the project in 2009 and announced it in 2010. But the first stable release, Rust 1.0 was released on May 15, 2015.

+

Initial Goals

+

The goal of Rust is to be a good programming language for creating highly concurrent, safe and performant systems.

+
+

“Rust is a systems programming language focused on three goals: safety, speed, and concurrency.” +__ Rust Documentation

+
+

Rust is very young and very modern language. It is a compiled programming language and it uses LLVM on the backend. Also, Rust is a multi-paradigm programming language, which supports imperative procedural, concurrent actor, object-oriented and pure functional styles. It also supports generic programming and metaprogramming, in both static and dynamic styles.

+
+

πŸ”Ž One of Rust’s most unique and compelling features is Ownership, which is used to achieve memory safety. Rust creates memory pointers optimistically, checks memory pointers’ limited accesses at compile-time with the usage of References and Borrowing. And it does automatic compile-time memory management by checking the Lifetimes.

+
+

Influences

+

Its design elements came from a wide range of sources.

+
    +
  • Abstract Machine Model: C
  • +
  • Data types: C, SML, OCaml, Lisp, Limbo
  • +
  • Optional Bindings: Swift
  • +
  • Hygienic Macros: Scheme
  • +
  • Functional Programming: Haskell, OCaml, F#
  • +
  • Attributes: ECMA-335
  • +
  • Memory Model and Memory Management: C++, ML Kit, Cyclone
  • +
  • Type Classes: Haskell
  • +
  • Crate: Assembly in the ECMA-335 CLI model
  • +
  • Channels and Concurrency: Newsqueak, Alef, Limbo
  • +
  • Message passing and Thread failure: Erlang
  • +
+

and etc.

+

Rust doesn’t use an automated garbage collection system(GC) by default.

+

Rust compiler observes the code at compile-time and helps to prevent many types of errors that are possible to write in C, C++ like programming languages.

+

πŸ‘¨β€πŸ« Before going to the next…

+ + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + οΉ€ Previous + + + + Next οΉ₯ + + +
+
+ + +
+ +
+
πŸ§‘β€πŸ’»Built by and copyrightDumindu MadunuwanπŸ“… 2016-2023πŸš€ GitHub
+
+ +
+
+
+ +
+ +
+ + + \ No newline at end of file diff --git a/docs/docs/workspaces/index.html b/docs/docs/workspaces/index.html new file mode 100644 index 0000000..23974f1 --- /dev/null +++ b/docs/docs/workspaces/index.html @@ -0,0 +1,701 @@ + + + + + + + + + + + + + Workspaces Β· Learning Rust + + + + + + + + + + + + + + +
+ + + +
+
+ +
+ +
+
+ +
+

Workspaces

+

+
+
+

When the code base is getting larger, you might need to work with multiple crates on the same project. Rust supports this via Workspaces. You can analyze (cargo check), build, run tests or generate docs for all crates at once by running cargo commands from the project root.

+

⭐️ When working on multiple crates same time, there is a higher possibility of having shared dependencies on crates. To prevent downloading and compiling the same dependency multiple times, Rust uses a shared build directory under the project root, while running cargo build from the project root.

+

Let’s create a library crate with a simple hello world function and a binary crate which uses the library crate.

+

Assume we run,

+
mkdir greetings
+touch greetings/Cargo.toml
+cargo new greetings/lib --lib
+cargo new greetings/examples/hello
+

That generates,

+
greetings
+ β”œβ”€β”€ Cargo.toml
+ β”œβ”€β”€ examples
+ β”‚  └── hello
+ β”‚     β”œβ”€β”€ Cargo.toml
+ β”‚     └── src
+ β”‚        └── main.rs
+ └── lib
+    β”œβ”€β”€ Cargo.toml
+    └── src
+       └── lib.rs
+

We have to modify the following files,

+
// 01. greetings/Cargo.toml to mark as a workspace and to add members
+[workspace]
+members = [
+    "lib",
+    "examples/hello"
+]
+
+// 02.1 greetings/lib/Cargo.toml to change the package name to greetings
+[package]
+name = "greetings"
+version = "0.1.0"
+authors = ["Dumindu Madunuwan"]
+
+[dependencies]
+
+// 02.2 greetings/lib/src/lib.rs to add a simple hello world function
+pub fn hello() {
+    println!("Hello, world!");
+}
+
+// 03.1 greetings/examples/hello/Cargo.toml to add the `greetings` lib as a dependency
+[package]
+name = "hello"
+version = "0.1.0"
+authors = ["Dumindu Madunuwan"]
+
+[dependencies]
+greetings = { path = "../../lib" }
+
+// 03.2 greetings/examples/hello/src/main.rs to import the `greetings` lib and call its hello world function
+extern crate greetings;
+
+fn main() {
+    greetings::hello();
+}
+

πŸ’‘ On Linux and Mac, you can run cargo commands on each crate without changing the working directory all the times via Subshells (A command list embedded between parentheses). For example, if you are in the greetings directory, even you run (cd examples/hello && cargo run) your working directory will be kept as same in greetings folder.

+
+

πŸ”Ž rust-lang/rust source folder is a good example for a workspace.

+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + οΉ€ Previous + + + + Next οΉ₯ + + +
+
+ + +
+ +
+
πŸ§‘β€πŸ’»Built by and copyrightDumindu MadunuwanπŸ“… 2016-2023πŸš€ GitHub
+
+ +
+
+
+ +
+ +
+ + + \ No newline at end of file diff --git a/docs/favicon/android-chrome-192x192.png b/docs/favicon/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..918f1d3bb334c610be5a951ad1411dfd22a24d50 GIT binary patch literal 31612 zcmd43MN}M26D~Z1ySux)ySqCC4-nklC3tXm2?Ps4!{83V-DPlhXK?QOZT^3KcXv_! zR9Dxc&uOdkRCmW}sL7)u5g`Ep08~W<8Lj`Y_kV%__g|?6c7*>AfF4@%Qh?eil9T@` zGT#gotyNV4O#kT!0AREo0Oo%#{|V850suf40|C(gA@F~;VyOSGwYM1h|JVQLs46Tt z1^`F^6lElJe1Yd(h^?&4x?62$3po|S=q_Zuosxeetc)7>6%qD<7>&5}p~7n5h`M>g z7wFW>D~CcUgpCumInEORoo6TpJu5BEVBZj&1)-y(<7no$lhL^V|2x;ClZm5+s?)8I zML~$kC?D&%`Y~$7WsSCOhxf%A2oh4$^|M{A>A6k2EyWmQGUc3?+w(f$qi-5uA5Q<-iKX!2#}5xN4MGfj z`F!&HnXKgWzE(8BBCFX1gXwAZKF^*cD8w&hTqJnc9hp;RbZ7dMLti8Ufp6LBZu_`3 z2(OOQgbGgq#cBMQwM;2;X+1lWpZ@eb7`#CbIbc5GlZL6Q@;VR{H?F#{XZ;gc&)IXY z@Bp4LD-w6VSM7P(PpgVcUX;YDV+d0&hn;bSU<>w%S;v2lzpCvqNN3j!vM?{T-D z+f54v@BVoPMXX4LEP6?hY1H+gY3d$TEe`72e??axuU`Bk?vs~QP5D7P4;6SgM0^(+d)vX6LHBVuQr;ks)w1co zy*xauoFsT;c8aTsJ`dZoDVpsVad3F@yfOKl(X;Q9b|nxjG8Ww8XBHG}&0yPv7WJSf zn4;#tq32O4#Qixn7TX3beS9 z1=-ymjZ6PSUwXXQ3_9)wegT@M;<9U22$QJ3vidm9(YnWiqFj~!dL+#PS{pZ=;d{#)!J~#Lj1XLO#dknDkJ~vetYP}PoLes||Ih^=5Bd4mIvzh}pXFY~*@G`V zZ04DfPgKQkXKJCZf~Esp@(Er8jHo|D+PMWiAoAp!!Z#^N#zGOUTX7J-QR^nr*@Q8% zWYtJSd{!OfgMVq#eTE0YThHiXHw$s4b>)Lfi&|^Xn|gKgq>!CYDuB2Q917KPzS-EK z4gQtGVlKJwZH`BP8LMVjF2r=wjg1gWBATo_$p0lU$bOgKMy=rO{WmFU2gb4@70sQ z_u(x;TYUvJJ=_0@CLD3;MeZ<~m{!cqsazmR>?N`qvZ08q+1mkViKG?AbGw&S{ zAgDrQd}imH>jtX@`;Bw04|t>C=ibkv~U z;OBS@poxBGy~_I7UVb{~IQ2Ho}yP(b)iMY4w z;e>M9NeV@ZKwn;|HZoy3^N|xO*&t3&|C?gyMraZ0XIBT2`=Cj)cC1^{@ds#{75DWXLI%-WA9cNO($0WQJLmNXVT#9kAUeOt}gvg zTz#Jj*vi#$`X0JdSRXQcV`=SFBiY{Rjna2B^s_$HqGwQGCCK}DlC)fNgJ-w zjd3HBa_>^*CZBJ)8}}D2mw&*4u0{`46;q}1enHJeep}PO3h=>1Bsn4a3-(E#rL|{K zCipN;4zNO++lKl0&G8*O1$l2A2=Z9nEqvX6yZ_9d@jrLJ!8u=v-+!bFcQ@7rcs~be zmhws>OUO%s#hrmtm6Br%YVhr9wBSLIFm|wzDAX)#Qj)X(p(Xh%KD5!#WsS)!V{-F7 zehL=(kjJ+>n<*Ev7s!#k+{Z?n;2+Dx_pb{gH=N5R&)7!?awey_9pL*9A3u2Sts*hk z_a&zeG?=TLZtDx1vGwVXi>c;}fXy4o7N=b9mgeQ=Q}@-Q$fB{5O!cH9`?(&|`cBdwGHn$? zr2yU3?Q?=GG4*hVTsu^FpC%nI3MQ8^fdiNDs}R=T2(z`^DG%Wt3*&#Jc*OM1tT|YLyLe!(8zSoY!p)Rvo8@D~F@n;bENau*(Dm|+ojvoxXs^QxUAF0vS zii2DaxjR1lCe?9H|CMg}+Rf(%yxqiEo282_E5e!jOduZv?tnLB*b;xb!V+4b^hHIF zh>)vm>+L37K-loq?7lve%HnbHpCSe=c=k8{Y_M}ECZ0AJM*kL8iSfb#fcLzTsj*s} zW!+j{w=pMQJD=e%EE1JX^8zJtuQ>-F1&f|>6J(I zzH(__H8Uq{>r|Z_qPIY+y4JPJaA%g!nDJKP4J-S&akLA!vWcrUt;f5z(vz{S@qyUz3nj?r zqvOH+vWt@l=dI7C=Y8DgdE6;aw+dVcD{ck}Fv%vDx{^&Bs;7!o@G-VeC&%^T<=L;r z+j}U(C%!|4@4!d6fZqqd-9_|981(Nb*uHix8>QbknI)jDqFj->fW{_QGj!!@0bK(6 z2Ofe2#rPZo?J-ImV2v3!D~BcP*r~HaaI2H{X3~neWWA3-%0QJr=6u%1I=%lcPm=Dp zPh-Ji#1*?IcEZ2?L1zVu>>Fov8{s0mY0^)}rpFAwWxuDdUcB8c&nR_eEL)W}Y{*a= zJ8v63ufBK7pOB*GUBk(YME0nGudSXoRCl~RZ9%Z+=dQ9X#5~Sk10T?AMO%AZdjZBm zPkT5}V>%w7yD4u!rx04R5aox!J?xe@beHGz<=_+KBgs<-Iw(7*srPXk4^0m*7_vev zD@XdeASj7TH?i})s4?Ee1(ObmUu8{aY<@=J^P5Thi9B_2QZ9^|sx3r+ooP&%w)O&I ze+HK?@JNU^2&H#RU|r|g4koOv3hIBIRz;)5`r`7dzyYO0FugS6*MNqU34A-o8^Je! z&20ytup@fIdrG3OQ*}*R7Y8!4Mat=KmgCwr_|BUJezpD!qSGy`k4AJE?-`vYd@vHU zGUOktA;!;HJx}}}>)`V>jhfk!mI?>>zq3_VC3j{fYvUcUgB>>oE!ch$Q=DsA6ADWk zLTfiu35C=7%%oeo%xr3~2SeTFUk{dy$b!zUE(Mxia~3>6KMb>%HAV}w)bTqhh`hgM zIak%=p_}?uvI3LGt?7)}gfFy4Cu^S`oN6CPNWZjqYYwPKPagC6kG+;KIKp~p@~g<6 z40=}NU-~NuYS69lUVEe;W5-F}`2DEI%QwFm{KDT5lBGOq?`bn0H)O~rGA)eLcPm{O zPb7OH^wUUcI(BNzb@`4@Hn>0XL`Gp}5qvWkc(nRBdg^=YFve@#=jxZE_u5td~wao}DU|8zCamXOxo;IqZ^HcoYQq7>eE^3?L92BjYgiB za(7|+_Jd;~GuGbKxkLExi>bbY6Z!xK&CgmH*frH(#*OtG8A>f}JA**|OGl4Y`#xGd zsVrMyA723f{Xl)*MRT}R3t{?qIr^eemM21&DcN{xgm)r%3}$-WZbVe<<(~^bd%vtv zh!=V7Enm1+S>Smwf5*t(TH@F2Yt|g*Li>3{<(?rSargK9Btp4du%9H5+yXblOKO_8 zKi&vgz9i!^(OghqCg*H(!4wUGrzP3#Z=&-|E`E>wko55=KOj#YbdOu+`fO(E4O2|@ zxmR&`TJ+YRP=SY>qqX5+d^QKt$~JbF-0d9K=tv>EEL8-W zM{5`~8j8>?HsQMZtphFoc4M2dGGRg)d;tB-tnMSgTt)&P*ACvo4tfDCpx2A7<+$;q z#1cdD78w=U93QjZ$4f0c24LX9e zaHU5XX5TkOfQ8I@`IRGzOM!rR2N(C+ZElCwvl`#Me%FkV_fdFn5HE=jzg4Y=a90U& z>Ec!{fmdE?8e10Q91%@t?v^57UcgwG&)%aPl@Idi%SNo@sMETStJ|4LOY^k&!$Q$I z5y{I;G*(9Bf|^h5qlAHrGn5e9h-$0zVW_fqOPiIj1JgJRK&7}?1rRvOxw{>Y(80Hj zf4v@$*V4~-Z_ZuD|WJ7w&tH;gF?VISuUjQ z`b&zByZx4p{Nk71h*1P6RDpVm?=6CP!hjmqVS|;d_o!K-OlivO^Kfd{$*|=yK!7x7 zm7F;w%($@l99@3wgct<9-N=7}8{6{NBF9q!I=#`D`kNj{ulnjdrUv$~1+mUTD}@U1 zIo1X~MK0wV{PXV+wyIlm#GJsRv3W# z-F#*|lpRw>bf2wsfQWJl@P*qpHTrjT(=ynw`qW->5;qQ&KmWH-{7(FtGAhlrgR5#s zOvUu`qKa3H{)))u5afcVVTAIsNzc&vpe@(IYmMz5GtJg3wJidehsIHY9$;v0Q*l&c zi4u&`!X43|tYgvnorODj7R6&n$w#|>?wes0vx>U!k=R>pk=gr7NRUp@{djPPBccQ? zxDS_W12l8%YF*nvGu`|2`h` z7yk8?-P<-hiCizq_UwyajoPg2UVyvr&{bB#4LXWb=fpGd$uMk~65bXos^EHfQO0oRCV*#@u_wzvmPQOJ zhwEmvVz_&(o{=n}f4MEmp%{)W9tYY%;n@^26hbXeRG)hMgtbw71&av6>6P0_K8c@W zTOab{Ngsy?>M&Wnz!(J6z}>*>W_XwUs=6}$tR+1NnUf2ds8%;~Tjq4fqRcuk(2O(1 zi@FK$h3DaATaVt8{m+v#PRc>l4W+=>HDKVf>R~5`(FABdQgyPI)RQ^kqHNLM$Lwb5 zbmQRtqC&s0+=s{|+B=A$A#=nTeJK@PC;VdmVlDgb1Wfbyyg z(fU~L#0z)1uNBl5xc;pnTvqHKjiYwH)0kDIb2xrp#|Rw)_%{agAAZ1nkO47vq58E4 zWch;!OplJZB0PVFM=%!>xtASiO5_h}b)2keGUK_7XtPB9D>(aTIj+=n+{8bEYl5XF!Zn?Dh!xEPJZp4jVGR_#4hE(@K;=x zG)GTC6j}|e(!P026e((D{hPUII$hRPAnaVVKjhtXc!cgl{?_*y(5TDU*=0)V7Z3mv zIOlA_3pb;J+lE&#pABVy&e!`l$u`xt=Rwc$EO@B4l++e^31u-|xh~kW>@@0JQI}f$ z&(IprU>re$WJ^H2z-)rlR(AIzbfjvFPz|Ti+4EB^if;eZT9ZSU!?S!Ix&!gA;nqJj6j=xHtJHp6ByFsd}rDY zkq-%eaHsn|Zbw2Y?kv_NU`S5WFr zZ(!hT#ATEdtK)%DBb%Tk!Ps(#RAmz=3oZ^jUAW_56)J_08?obGdEI zmEIvPjU10B@?zIlHmCFs5dP|qqzdL7)lsIB=-Wkn;z2!>x6Z5{y^afOd^~W&D)!~d zsisf68&u8S?{%Hcom%3xqvrCKR+VgN(I3aqHyi{}$5Ql}IT{8Sx>Q^+2w_QF*?9Qts$vzBcEOF>S1suQ4ZvTI%0)Q!whc-kXkd zlyXjDAXa_InKVvdG-VO8FoKy$VfL8{Utv-(4{xDy_g>Vt*{s&2NiDREz6`R2)9Pc^ z*7JV{v?6OQ+eCt1|571G)~J_c5H3dT&n1Z`FNcg7(l4%;y! zX7+3UqFVHJ)bo7&O^|-)2Nl51(c9ERyQUz1s%iPRw&a`>^4}_B{v1!#l_Msi5^S68 zCFZot%vj16Ms)KkKi%$^-vjAGJpMO|hET41;Ca>-i1HWy_(ulPZ(S+|Q*?%HHAnb| zkVwe@3mdyMvj`7p1Oa-gLic>{-zKzqUjT@?V|@weWr5oiHI1U2G;B4H zCpj;a!lPm)NH<4*N!zKsy;7u<69NHZy_u<6*WQwVMn|sIbM4$11azvZbJC zG*R(X<0sIO&8al<2UwUgR0UgxJP#dwx`UXddbF{_dqg*rcGW+wRx1yqAnnX8!G zU(7xIXCKVFe(TA{S)Hxeer`B4-r{j$#T{o4>ILBcgO}%-hwrs?=eDy2DF1C?y63gV zv)LFOL*$@6eD~ht?<_lYEiXh0ej$lze0_IT+dy>mw#{j3Xte=M1MZhv8PbwG* z2cDR$6U5&!IDl2LvJI_A?i17CDF46TE9a^1wt4pr?5)9890yA!y87V=?yG-X&vPr) zh-0({BERa7DA-N-NcJAbJb14!QZX1$(>DPL=Apfyt0Oc z9`rrync233`9*!^F9vFx5M5{&y5-YSCG@5!)XoV=ee&*N*e29dHj?aAHTZw;tw&nq zqS^)Gfnz~wmyUbs5orABM06Rg1EM*3?t3Ska`Ashjw62h*+K8h)SgC>SONiR+`XZE zDguXZMAG$B95qq^Dnd37Osbg?)DDxc>#eaIT19grt#gK>xE-*}=m(5I$$3I|##{8| z|Kf4M7ig7L6?#ATXD42h>R8qkp-znWRL(Z?+PchQ)G?RLuOaj4(HcH?oJ0`-EOAxSs zlz^2&X3guFLJ0+zk2aBwKFucNB#Z2THEUQ7WY)Hx6>`&(S^N1a{t;W{0V?Lrds0-1 zyoxVhA9XGdBfw~*hQim4WGp{(egvD^{g42+VXGe1(Se&=tWB)pBRFFbct&k+5C1T$ z(r@J0aIP3vx5l7Z!bnn3CnHFF%_3NUrAhFgui+dsLO+dB0+6^-SslhVBag{(6~ik? z04Ax7{**@>JNbff_3~^3l8-P`vXvD-Nd-wKQPU79#6<^6MQZ!R0%M>8p<4A!2WPX6 zm}?D)-KC9?T;1U&nSf5{{_hwTa&}GC_473gSsR2xM;F$^83f@YzcBkKG`y0DYv7_H z{j$^#PfE>~!hAC&_V3PRe@S;!BOno@3CJbe6*+D--Fn{EITE?iV@8^`8#hVmJ0eqr z+8RB*Efc%6JqJ~Ur~T6jU~TKcE{h6`H~nQUqvG?BDF2R$iDqn(Y7tO#Vfym^dp&~j zpF7LDUbY@vpeAXpOBH-GdpgHR7P%gy_ zL5u{0Y61V4#LC5TJ4%5+2!Q1yB~<@FKYN|8+WzwdD%`4x%^ee zxmZ)nLO2}V=!k(r=JLz~Eiy=onF%zLrxxQX`)}aw5t{~t+rL@}D7|unKnuv^@BB&4 zEcaNSZ6!vb!K+)G8758zr-9|&-XHC2@vq8~T!J#P7H`M4i21^D+JzB+ciaXOx((c@ znK&^}R8T!5p8mS725GxG&wUJG zQQ;s^D|+P2*-`wM<-Y#bHrioTIV2!Ob~X!Ih%xGbU!ni%PIV&^xMWAChswEw~QroDEx3h-z#g`3H5~0uNjd6L^Jv`uW zf7#f}30E^VFjEvEA1_f20W}B2rI7~|WnRpdi=|b{S&MV{5gO)fO5nc{xpcVJF!;)4 z8S65K6qu;Dor)h>`-CTvo$P<#oVV4jH$ih~ba5zCy19{d?V&=Re5>79r?QLfe4?^Z z_NhF%kwfmCciA6Ln8;q++TCZ80%L3sqZZV?XK!}Z8Ubf8=^4r=%g4Vm%R}VF-yw9Q z7j;&9zv*Bcyq+CrY6uOE7w)}S#{wP0r?1D5X74KBkKk}wm$Pt|NhgW;j$>fkZx0S1 z8HXATVo=2h55&V(vI9UM2~+Fk^t?_7@~a^fW3ZvOd=m_Fv_tJP6eNe)Y%|^C1PUVA zG)M`8>Kuxx%xC)=X*fvfHL0tgQv;p7DCE9AHzz>|T!KP)(pu(1&skE5h%un&)UZ=Z z-=mXS7x-OM&yf-Qh(C;8BlReDr%|0lg z;$m-7Fb+D(z}b#(-FaWR`cl{O%dax_# z{$lq}W91+HGc zj{n`FxQSbWjie&!40Jio=>kqOgy!hf_1q6VW!F@vGGO)|XPzx`Ro1oka4wE=P}hBP za!=1-)Wg%&=;l=mBT0a_A5ELgsJ1)pjCjbzzVjFgp}5QV>x`0G3rAh@bHB!t>W0Tm zM%{*mv6&@stkmjhO=W$tdvu${1fwX?zdJv?m%^K%y^4dCE#-L_x0IQKk4uZlD>86a zX!BGzpy@|oN{0LoJ*H^_$--xxIomR-g{oh;Gbu<$RH3cZ=)7_EKX|01O__rD5VR{k zMu*9C(f3oqwME~# z#Ol+#=Ogb7GVyogI_A&H%4{OWN5NwtJWOQ3_Z$*SpSo2&R=5m2WUr$hrRI+(4@K9g%SgFv9MZ0inEU8Rm;HweugI9Xe%gXQ=U2%<}9^($d`vlwO-#)F1*{ z3aDhf36gdPiOA+qmmCS<4E2mo>d$5QkG}IVd!e93%+Q$ag_OD`vfwR#^*=g#150CX zOEvU*a+f0F7fH=>l?uPi>T#NjF&ym)a?4heVgV0rM#3f@8C%1dHp-i{nBSPDOPo^R zvEUYIYJX+BSLPU2?~!KtDUXi&dBz4yCa&r~J88@z$awq+WAon{UC$o#B`s~h5}e{j z0R6~7V`3a#WE_HP_ptRa@E=;wl$l1SKzH_t6xC*H2^dT0dKTh;NF+A#&*k9=OP(T= z1WSx0RkO`#kyy*LqDfldZ5q-Rd0NkVx-O30{}XyZqFB_P&D)Mf*AUesM$W!N{E4*T^o1T;fLOe-9>E&5t&=191Xln6$A%2 zK8WW$Vag1&r`KISB4Q@gz>m8@RU_kolwwVoIA$E`OngEtC=#w$!2>f4ZwqVnLPBcb z1T5I^UvF+ba35MMtSjC+YU`3+eg@oO*2)ik8V)Z`>w(vd2fpbi*SS^CEfDlxMlfHE zw}K5;6E?cG5;zqW!-87cDrSuknNo+HKG?4sX3aNowL1I;Gn`Y@I7z|VzZ^phodd_~ znG-og5meDsw%~?m0*ELpp`D0W)5>^8U|UakMs%c^R)~y$es@5=c@~*0F)xw`z@2?w zYK_Q=s?`27`dBU57TokOkWyqCRE7QSfcGpMT*Z3plYtfLVVJzP6HPAM6LK~yZt%r< zlW$!>G{w}ApRZ4c!Gbcs*~bO#^YyoP z{N^5_A%;vT2Gq!gO$)Nl>_ zS^CubtAPw`zwV19K$CE!YZza&Gr7WD)5J^c%h zT$YNm>mn9FH*&ZQ;)71=e{LY=vAdk~ev`u(!uhg`+bbpbY*05n0mFn_C|<(P%-mM0M|DQhPdlx~g5Vh>V2u-z5+b2Y)V!9FAt} zIa|G!2!{-_@ta9?%j>L}PPFYPHVG$r8pE=xo)J#qP-N4rQE0p9C0Bf-hG9^NW_vau zSd4o{BsA!^Bz}}(Aevl)pF(OCj^X|eDpUkc@KEU>mCS;8L~ml){q~5CiaAW0u1?=l z;hrK1j#1{1Tv7Jz@NyP%?CAR9&8;!(1LvvOEUilgqt{J!io(K#BAN79f$C|)Pt)>I zT)o^lYSTa?#u$@`eqk&8UrSOE6#tScY+mC{U;sdQm3qp!C#inLp_3($%D{)Bo`!7! zlePH2xXjh9>xV=h(n2dN=Yd|6Ah+ps5q^8XfI8PoVT#W7z5wC4F<}8dxP~L&!oAbGkJag=9&m6!ptB%Hk|VV z^58$%T7qrP?Mbgue}NlHtN_z|@2&+4D$Jj@N&lF4)R!CGEG`FDqXroIP?deuhmEMR zn#7=L7c%EIkbAin@hb3v3M)zjC$xN{0JUe32=i88nrgn}+nk$dzMiydCW17y1?RUR zoZl`w@~iG>+I>=%*w&lWZ4JlgpKmR}A8+EX5Au{5{LaKpfOOH~8?yI-ie^uUT8}X2 zm$fX$0wuZ*+N>>go0}J^_P2QAv4NYNrY~+*32#X0aOS7P9M2PZq(J~uL2oJKPgpbY z=_TWPm2D&+V2PU{G@z#Dv$|9z3zi5oB9u8fu0xq5bxD>rg3p=xd#swZdvDIk^)u(S zM@Lbu45i@ysglqtab%vvL?QW-;C}KV)g^(qmL>M)y#lem* zVJz zMW}}h;7AQekNV47eTfs*qk|%QGPefrbKGo0NoS2?5cc&)ZW-)%CT`hoqQ&2T#0c)_ zfuGeF$U44TF8=OL3C8?t$PNw{*idSj5xl%KQk0$S?;aA56(bfs>8i0|Rs;8p{I{G# zlSIA#oafF4L?gAKt3Abb4NRyJO5SNnB-(6fXN8rPZ$G6j{`;wl2WJkqCiYadlg$my zw2SLaEf3v&SkqWaQR|NlmEiU$20SKABdK&*i0a}=N2~i9Ztm$zh>76&9Xk&&loV!G zfrqiBOY|iM#F6WL_nPMWV*q)>cq8GQ#KHnS(UaGGof@!8Sq9A`jHy>?3adY3>-}U3 zvj4eIwQm%xjQaKhCxmnDInlfL9+~}=MwAJP!z^kFg%{KxdYE;j!b;_`NaK%FmkOghJ2&3Gz_KI6BWEW%umQfnT*fp3I!sGfdmaW(YhtCcIo_u>H> zqI|hxMEH=vM{o9*0e}nz>X{)fXBEJAx}QVuR@gf2d@lJyg|@Y`hI)ZEwY_t-bQUNn@y@3DymngB<`@3%S%{~Y= zb=jOiov1iXrPj`Jk_igYe7hBw`&vqz1L?LB`-2z0pPCePsVcAp?nWzp{|Enq$b67% zn?{it!T2YUOfl#89u2D2T*O`@BjL7nb-$!vor6x1=|zks_AK>B-)R|lOd*sXWRqhz7N>xn3 z+O|U?pQ|oNTgT?TH8qT##{y<^6Gb}=%R`3w6*M^($2IZ`=bPoOhO$mXaTI;y!Z8P=7DmSVrz*HT#1+WCa6GaEjA}X%^^mJRG|HjEkWZJ33l+Bp z=&g`DO_7@XRy1^G8urC%!wOLlerXD#QErV_>xP7@9zJ`D25ra0oX}t!Xa6<=$8pfi ztLB?Dq1tq)x5PzGk8{`6(|TdQ2<2BK;to?6{b44B_94M`qMp93Als|KaSe@xAhDgb zl9ql9Z7ze*tR3B+_zDo6ITH&|0l2{`iKH+}!UsL`7rsZmuGGCXzN+`!kq<&|sPdC} zzCM~HC1?zZLeBqQ#!d$>v9e5boK!LL_eTT(D~e3>4b?y34lGirLJ5?GPJq?}RkXdJ zA)vvxd6YBoXzh6YcNMq%XP`l)Qji^4=?VKtw^;zuw66*bNHqGy8%=wKWS;7VZJ^jR z^CqUrZ&sPhH&d?0P+~x50&U0GJZAQa%Uu(hWEmg0z20nq4qv(K+_0TC z^M3@WMdf15km6xkPtftv^qcGyV>gpgXvq8Ow6$L5JfuHm6FF;`k|eGR@FWsCA^{kB zroHnZt!CAA)BB?51uoeg{E2G)Hi%1n7YyXioV1)GZ>3mE_|weM%l>j8Yn~KyvZE(}yTDq8 zauwo`h3tdc`p~6W&HMLi7gb4^P6I)~gD`s>tY1*hYo9=H@{M>mY;rp>|pRnrb^f3AD%crRqjO#JRC9+(iQyuJwbm*C0 z`Jj0(V*sh0|E{L~-W!xSg;~}E?V|=c)IO}nV;_dJ8H5!J{w%-0+{W4(eDyZ`xh-}R z`*}_`^yTk%6tOW~nj5`(AnPV#kIJeYuetNqZ#VFMwaNHtkV6CLM{# z;Q|a^F4gh?CCN=5o}Xg<#T+TS1&fsnxi_1dglA&d1&M0D>sAR5FE09|K=AE|)YqC^ zfB3*7GJ#;Svu|n7-|FcSpOvm5g5rzcC;|naV4=gP#2(oeEE7QVF=A$~Yx)~UVvvYx z-D+n?&xOz}+wEo&v})A|Dk=kGN%!l--*tVqdxO*dS}vS?yWxh)_Xc{r7Z%i+ zJy6{b!4QDRzRDSd^3kv0wYRk_Zd5rg!meTD_;A}%6 zqs@#nC6erfW^x40*;1L~MgjAp@sWdpS0TD_gHnYT0lSy1m2VA}v_qwdMMAF&9gaKp z&!vR!=r;Rk*8?c6>e+=g)l6-JfB0C3bFTMN65T&Fh_REo5c-!Qh-%{KZbpXlLe;k@ z88u_ta17Ozu8{QlM_<}5MITnTxi8N~*;C$^LAb5<2;2Ha@md#`tLs(o@Y({N-)=Lr zD!$*Kh8!uHKc(Q~X%MJqULIwYB4#G}ksmfeS7Xv%6cKd3&M#0cfmQ+S*Z z6`R@Bv@;db1`7QvlNlYGb{yl~XNflKoL>$lmeCmaVgP*x-)=_mr_rBolS>B1^hc`~ zTb57&b46#KjSGX=B)-Demv$$8c%bS~ITg}O{5yuv1wd%-NvSp^o;=l=KLp|9DUYGk%?RfrN8Txnm8kfFTX9mX`u|L7 zq*Z$t@wPAa&oOa_0LlSBBU(oKaV=0Ufu9p}99boGr0-{#R0e zR;jt+-9FyhSEM}v3`j!X|haRkEPDNCVQxz zC*0RcEb3ZDzduMx(9EJ68rl-qP@qU~Dn^_Xhu`fr6cnCmRU(-zz^G_CmkhTxXEN6p zQSyU9CTqnoOhkr4{+qkrgoG!R!I`tul#fqpfM1P`;oR9@lN*@p6C3M0WD`hG=q>Al zrC#k!oNLJ0lh(?vGZ!%i0QR2XZTA)mbNOY*SpU8LNsq)^azQE7-X;D1F=kTeMg>1*a{ zp)JI|Kx1^ZqiiT~5G`pfv*cR^Ngqvx45Po2xfsvF07g1PAPdhBZ+)H}^{X=TFR#JJ%Z;<(^Wl*Gu7}N*f2L`M6!cCrZu*>^yG$YOLK-AE7?WUAlAn6W(1*t*s03ur$Y_r z9Ui>Je5gr8th^4&K8BORU)8hZC=M-yxV2*r%wM7<5anFYP)evf$G(>6uZxA#PrkDQ znK9o?xm(LuP3u7Nqidmnm&L~ol90UfLld&V&ab3d})}W_sT#w380C9 z1~W#u*;hSssShE^kroj>Nj712JPcw>?Yj%Z;mGa?)K)NOZ_Gq0jyZ zva^>LZWf&rG5JcfQ^$JCXK2Ug$CXdZmRkk$ED$c1uJ+h={Y8?#Q4W{CfjY$pjE24ygv?wF|MQy;iqY zvaI(sx_KM|bOp{L2{IO#z{wY`Yc4Go;IL(XmrM>{vlu0lic;#^HV1*)rn#aXxtm;X z)}}b^G*)_tP%9Z5jjYTVI!&K3k9Fx+#`f}~V{91#n)zOTIg97A8>#+djGvOY@Yx)LA%lEG0hm<#B=+lGkEZbt@^t#8*$N%En0oFv_ z1gf)rDbd(o811C5A%caI2Ob1%CVSqOVAUghYR>(T4eaDU50uS-+6^tNU67;>mg?>~ zgAaT3)sWAcpE&XRA6Kv|kwcn4&_A*uwbi{^DuvS=&dctHT_Ne%q-FgWUB3ei!Iit! z4BUm4w2tIE;uNloIADBAjio@(M4ethdElJx_ z2t^Vpl#(Y`QIpkr$r~~Qg8*FE0i;@J?5E!U-OEuS6Kdn`kUIJVAd4ktZCh}8Smz3x z#|c+J^<2EUj+IA=!I@pnF@Zv+`*E1jj?IQNahrh(cq`D^I)S#$b_mBF%irtCZ#%cink%0fiA21r@kAHJZ{dFF)V%`z8!;0g-Y zA+gbxf($KHeI~RQPjJ)%xh+R77>&3#k$hf;`V2NhYScmY6sFYd0Jd(xTIN&e*J~7A zPP=s(4s9C5vMz)=U%V{Qh2=#ff$l{?1QVzrqNxX4g}UAHANhi6c6-sg)kC`Vcko40 z)H5|v;upjnhw|QtM6}donGYy8SXqzE=!yq_e`j;mCP6BvgI{76+SMO%MW(tE`%s2h zFK$>Q@Cf()m|o^(X&0bDSTmZaSo_6*JcpXPt2JPH`&$X@6Z8@_vO;z4Z_YHySw{^3 zKxplMe*t{^*V%6eOF}Gph>Eqt!#Gl|MkPJkNn|%R1Ve)ryA~L0OsEGMPAJ`6@6WDX z{T;ADgcn$2o=wQ571_=-nE@_#z}#^*|yc37? zPl_ci+ZQB1S5}hZ5PyUp9b|jxYXK??db)y$g_hT#N47~Dv{mnwBF=)M@qYS?7JSWp10MwEA-KR3UndV^(c_>7a2MO0K;)u z-fm6><-C{!u{Z-Xo|!JA`XAsfo+GY$29j$W==)3_K0DunEk zr=DLvOeY_iY8DgvkFtmdMcBSMYC&$XsAhaMmE-Cuf1=VHc+XNc)K{xaE=T-~tE)?7 zK_hq7>U*0dA98-7fF-aw(w1S)Qxw}zATPv9(Px5?YFVOl)@4P-+iU0AD18(_=(W7? z>|Ejusl-J63HUydyyFM_>GN8;+^o*|QjI??=>suIjf`eVm9DdNc4S1}tQ_ zunYX)6#xkAXXV`|k79QzvEf{^D-m|E6}z7+9jnyy{yRXj_4VxcdSjHSa=$AkX%7h! z;HTHOH~+G~;BfHC=}AG(Ff|PoDs9sZq(;d2eoU*%SZBR`m1kY$As@Y0dX8&S*b;+o*&))l*Z}`xQDvT~rBn&Q^uQyW?PzDJ|v#9XhD1=XVy*?P%iu%Y*QP0vUc&=jAh+U?B5h!$(1^_KvyJ^ z+4)F~ih7*+dZuYqjb&>|xOZkmM#WI8a-JHnLXm>|uBzSGe55ad^dbmtRpRuKPLSE; zj}bo-sBE^f+TqIv;e%8A*eE#|c`&FWtO{^zjBkqN{@!%;HOdAsWb-6GmhR)+ z)oK|bTt9AP(ae52?bF&2v)ITrMbaF!>WnsY%G=JQt7wZ@BR%FKAapMpR#$b zhyK8i_~%i$>scRr&q)%cFMn2QJpEt$#m3dH^sf*rT_|p|Gu5fbcavE@U|C*sCC^pN zTiu0$H5?9eXG`Vw^tLE0hN6UFRo)Un-3**iapQN(+tJ@`)oV!Te; zz!g!@xpaeVfLn5SxjsE&Ha((bvuk+dJDtLb52f^12B*loC1a{F>Fxe0%66T6%@msQ z!pG8V)8>Nea&|RSM`L5DcCXR;3hZQFyR6Axd7^PMgphyDUU@?$^Db=(@ z-rYM$DU3{{)^wAHh8=_}fuEdO+Ps28tF#-)YV(UXP*O_LtkE!K;$HF}lP_w7*dx_B z^$30QiujMgPR35WBes{bXWY7c8C3sWCV(8VO+u^Krb-f>*5AMzE6D1B<;S=1nS*=m zJZ=H|6Z~4{p_o~&FFcqlK_^LI?e`2~Vh?Bawqo$Il5YVH43`Kh&g5%HikavD){klt z1sEu=?1z}mj18vL%gZQo?ifO>C#&AEh6-hiO*iXJ#VaEBV&fH}P#TTdpPQxKTOg)*iBu~lg(CSy&)d4 z%aK#107Ci$5Evtd(WcgJ9eSKcPrezqUS&a5|5nf#VyiDnbgp_^@v^+!tivY65|5SX z%g6)#EPVwq7(F`w*)f6+W%N>aK4Os?;+CA`u`mP1OacpB$yxE~x5(Rl?{?wK8zM>2 z5FPlhAfex|VW6iP8s*)WgX zl~#`Ns3glfsrdrRpuS{olObDp*Q@%<1KVzgh=o5qR9wY9LB}wSbrDi&gHjy&f~$D0 z@e34PRTOO5Q65>sN~ z>@1asK>D0rT#Yq@y@O0r@pIMnq8Ipoggq*H4pqA^c>uHS9>Wd0b(eRjlfTG)25@|c zH=pp}o7;?Ngy6==AiiKCV2!g`AcR7ENibeGp-Fq6w)jhuPoM1k{LIGx*MEfjnb=c=rggD}_m8=bl{Y$CD)ow4>BJ*}nrxp77B zU>eH6v=wCFVuQ;}35Z6UPMz_VvWo}(!BfW@oi`0aItWLvC~-<937l=NI<}Mz&rbEy z>R4v3bk3d!-e(`T30=RmJ|Z4aMw>B-f&XoJ{=1_&gbDYk;T)tpDHf`46NOyhWJVa= z32=W@|8%QD{ehV#ow@1reBx3lrd2tTXG`geUl+R+f+S0@%auY{NUG2HD9{j-a<(6$ zuQn;yXEG97%6Hz8bmVrSBz}u)b0_%@@ML6IHnf{0xh`-_ErxM(JGL#1t$EIIOYqWl z9;QD=@oZ}7;6SZlXH8(bxAFZIVjvc0ez%x5sTKehGq!Ex3+{L#3csJi*EB?!4tH~C;D|?iLeK)!;f}wA%*~Ri? z|2zwS4CtGc=lqh23ZBPyy9l?2R;@>G3DyzGmK@D-uR54g6$g_SGkW&s z&WjxY?i%j%;lS82U;IFaPi6~yIz`pYg!{*KA&txSC>_g3iTA|BDGipZYjucddsz1% zs|uSEQmi-RCeenos(!OS%VJ0Go=NCb*OkG=GcLTUbWTAgbbgf8=nT0(TFY*+`>P!cq98W&T3ZX@F19tfCa4U1 z?PkQ%-O<$ST3a=0qto)<>08GbYsP;*%tQZK67QZ#1wYuSaCX_95x2MYztvGNq>jf& z3BqVM^3%8o!IW3RWQ5cy>DhV9_=2{#8g6BRubH2h!O|T*G2)4cJ;D%MaGBtr1;ryd&l)mX0P>vZih;(03GpG0> zLPIO8qA^<{IvIBWF^0gNlO@)ut}?v1)RGYDuRowdQm@Xtdk0P@yt?s4x7uJyJRrMe zvIN;FVm>)L`;!mbqoUJV}cL6hkW&2?FJ-8O$Q zD(sSWQ!q_;sJ?Z&0MlKV?SQKN5pn?I0;zD( z{@lGpzHM=>A`JTvm}}-4M}>YQ){`4@l@dyCiOe5*m6ndiLZ|LtHs>bXb`l=pm>7+iNkKhXv_kYtLw}W2w_UOkM|C?D?`MX(5(J z5WGe*MtntC{Y-*f*I9=E;#de~CAgZKE(d0%uf`P>Ha=3s%i#GP!i+32A|B>H*%>Hf z*t{AbJsD2b;Y9ZS;nfh=Ce*1TeemTBpV#Ig<&*)-Fc{?HCfz^X+aB4F|7(TudaXq} ztTsH|tz^@^obA5HZ=M9oT;rC0-q{i=A)*F?%MQ5+sFJj`J*{G8N zX4mq&RhVHl zEX*~M6c!iBW}*xd;J&4{r}cGUJ4hicG3X(DG@|8H>nuOMYzVdxICbdBAu!HGlt+&e zv{{}9_4hP=FHI6Z*)&8GOW8#yLixH;LS_FuZKS>ue+HTbTyYqsSL5brQ|0YV0j~29 zcK2rP%)WN{21a-9w=1DzAd#UWZXfgC1^~h2b%;P77|^1Hp(@Ygq5_1cP%loYBPeR= zoi#Bi$}nRSVayYwNCCly$#ECXE??=1C9aZq_3JZDrh&+9?^iZ0J(xMcV!)&6=BCm< z1|yX7yK=3r1szjRvl+t6e=d-hR*hg5;Fbq4P*87YGrBPtKwPz9_mFvO1+T+=$*|1*AgYSH+ zdN-7|D*hrc(grsP&Umo(BKzK&R`b)ODDQ`4m z;kC&oPmGje2Eo+9D6$0$aR;A3>(yFnW-u8t*Il#CxZT12lOjJn_$e<358f+5j2X0hubM#v==CHBBUC0w3*}v<5CMq&4I^SXe0Dw!o0MBF&vlMG!~Jy(y5t zKJN>>2)`A>hc2!()I>KT=VEx7bsIAeUVl{j&kgTtu@Ebiuylm(4(%@eln0E+8ke`> zNrXVsGa|_8t7R#9?CbpHUzVN%;$h&=;~5tWDwR>8AHz4kn>!O>cH#3IC zOr|IeEQOY69qR%j7`)L>&+SMeYJ%tdx>~U6DsBuKf&StrlJ0_sT!fU=G`Ya^41B4xHx%38SrUWJ001=Xl>P& z7o&qi1H8uC20x_f(hr4Pl`;>~%Vh3@ZZ=qv;sUw1FG?+?eHXS%J@LjMJ%(?9276?` z0!CYv0p}kzp~SoL*E=v@Es?@w-vXH-@A9j;MdFp^5kf7(QW%1_kHaMIUYw~IArrw# z(aJAukfmuJI#L+tByf_B(ibhiMmwpUVzcJqHYvNOE0f4U-|%3!boo}(ohfhS~u^^%BS$SGBuoWXS< zM1t9@{YX;1CKwgcdZXO$lPa<>w)fJ7arSI^HwZLiMi;F8IDMi;Nwdk70a5Sr99I}Rsv(z=7ydKZwUI+I)X~ds^?R}0`{DFek)PFGg2y? zUZjoxaLJAlUP3DHB>ktCT3oTP|0M+gp)**`IUw9ho_{yus)PwND z>O5W(Wv&efx+f#fRyCiHcZaf%BUl{?h@^0V@dh*StGSUDC&;48uT0t*&+Z9?$Vl5IC}zvun6nO;Q1}>6bN`PH^8= zVg@;}(3#{flW}3!4tk8E_6;HnAN&6B*Dc-Z=En4vY`;>P&nh|9DvmjrL}%@^o41ZD z7Wh+KP%##y3_P#$lr(paFJOn4RO%d)V;DNFV6OM07Jrm{?aUYM18<>?-9DR)>V(z? z&$fyE_TnyjDxm8MEcDzVJL|%BfL1S7@_{Btsu4c`-64i+FMPnDcSOJjWucIOMZiiy zpoSXW`;*i~Z{Uww!WLrD$qgYn2d=NcT%vg+e6alt_04<%r;e8nq=n1x`0dv(bPRVW zYTWHNde{dk>Z3FRedt$(AiB(&qT7S5?A#uO|DUvSWW}k}VDtnT-r9t16KU!Qy3{p-dH3sdmek`x+B3SXxhMnq4kJjXB!zwOz6j z6)+G@(_8kx${xayFVniXc+ni8G*8lyV|5cEz`kM115~zfXF3X4l_s#cKfHb}PDN2r z=qzHim%(Wh`&>h&y4Zm+7(dT!lwTI@J)(<23@*$H+*ia4(aKlZa80(7ErLD7xrQ=> z3)G57+)!=%hJfzjrRHL3yZwJMHK<@a2%gwukRKlMdWOxJr)o9*Lo*%R9~)0!5?ucA`&V%vmM2Rwhq@9 zPWVki*;Om(roYzU*k`m}W~p;vDiX{TgBosD&@k7()TFypBq3z87XqyoRGEvoo6D=B zd-Yu)=JYE{_}VySC4TURU*<}H=0CO}S_C<<;xa2|!F@*IPR+UX2|UHi(K;;YP|W1x zR&P62sv8u?z*$(KkD8PrR7DT=@?`zlN9-W}?3AYjO>nUTe05YV1SJG=)OEljfI8NX zArM-@g9BID*!wi9!Uo?(sf?XXt}}15=T_uxSs+O!bWe;?DE zJ@cCGhhybu}4>0|7 zF?G%jlD5Ba)!TDCa7e>OtwIk0OlH2VM$NRhXlbmb-?2y9%CO z^K`8@_;#+aHAWM%#L-7GaB~zf{#h8-M+bk@i9bF6Lb!>h{msAV-x8vG^i3E=4i)3S zl)Q~OGm2j2|C0$}yn?=qyUQ9dPV^2iq{2{bwWix}J@PNFZMP4l8Vh6WRF$CuNNb_V zf+Km(jbNwVR(FGterblIOVbSn!4igNgP0{C5O69R5F-RhMv>2CUmFj52HZcs|M9Ql z@Xy@G&1ShCZ+fnFUg+;+ry2boLZ#pVE@3#+H$iM72a%IXEOS)9ssL>uLE`H5KZ-S) zRMqD*(SqU1V8#kk640b2C`$CuLd3=D4k$dt?DjjK102{bnLa;rc`XmZP#ikv|K;%V z^Sd5TrL#YDeV@Du-8}pocIyd{zgetK8^ZEsPB<0!uTgx95V~Arl8;HWE(p^ zp^!eT{SSS!YA%zsO;@xGe1#X*sB4RY-RvzgxYCZ=Ai-*)FotMg)Ko-a#k|A~pSRR+ zTIV=#AR5*53IuKrvN&6K#WBHR6}tzs9;u;w{3^Hl>}7|sW-q4OE2XXm26#jZ@h6YE z@xIxAg+;DwR7!+f{;CeQ+k7tbxGSFAmH*C`VmoMJiG0e{KGN%PsAN|qECH$ti*j0$ zDW3N&31AUHo>|AUTA(Gufal^wW1*=-F4e6XV{nLZ{xgt7Ihwlni#jjb37Wn*OC|9Y#7g^|*|GXgY!hA<9Ri+)_R&-aq?# zB)&B~PamSbq^A!T2_+HVdK$q9rlkucbLw%j0l*QoBE^fTZLzQ>U!|?a1VY44y4ntM zq~;zrOv2`J9BMq1^}Cnpgz5F$iQ-HA?Oja(3fXj5niBY4Za%M&S@#41k-wBG*#FdV zWe*goNlTQn6wWDhWQt|K9@~O8s~(gdJhW3VhXJjdF7Rf(a^`~~6_>aU$YO9tNig7l zMagi65*Y)t2#9|Ume0^;7U6o443p^9imKfWQ-VrIFwnJZ&yt|3-AK4c-^t55(l7`c za5rM-${mW{0|*0v?F?@{J>*jL?|XbHo`b&p6bu&`K92OlJ~Qvzvn83^yf%uR$elr- zi=;V!|EBgi?5?`M)Hj7jQ>S*vw-*vE*U0)(rT-aUH0c>80w23RxlqECZq=yd8KiUJ z?3yS?Rt?GW>gMY|MA?X8M6qLi8@$2Ck1!z1a)^#){I}|Iy+Wih%2TEueVyxXZBks} zi!r@0m1Iuf_-Z97M~pRYc+;SRs<+u3#!@a8&a4FKf0c?h+M; z(+Os?f9OdsTKgbFT9bW#)yH~V`W;W)(siHz_s^BxbDTbsluM!Wp4?$A8`UZKuRfBpvFtHELKYk$| zpjTL{a28ddd)AffQh2JTGt{t2okLJ129$Z~L_yDR>si^_MxnEZ4pBUL-wbPmrzCilqi1ytC8&2&&zLdL0`y;RELiwq}0=frsOpwx}z#965LzWC1J*Kn; zdn%vUR5N#=z3i4AS${E<~^cnI)W)?I0(rfzOVnEQ$7j= zZB%e?3^2hADClI8MS&H@@NPPP({fuj>`~2cv-TFs8tv`qt=q*>4A3Mqf`}x)qH*o$ zf06X${z4<=3;N?XPmlH|qCc-*UE0XDrF9PWy`4og^Kuc3%e`BXX%cV19pM(m0@BGA z@2Pn?1B@F|^t|n6JQ?)@#iUMyN`LC8Pj@T zJ-PVGRoNucZC3o-;}gk8$ufMJpa{RCXKkdaCHE}C0RTxM3fKnM#DZ%-nPSwsQE5V5eR50 zC`Is_sT>|e)MIjGz7hd{7(bS>+29lHI{Ze@5*on`4w265H|wGZ0q3td`1pok1PD#e zD4oPpn95%^L;QXu{8?{sS(FsJh4hI+cegrnOr$5j?ywMq*y2A29^?j6SAGMU@h)@0 zNCsI5yBn!F30rQs3Z3Ag1%UBLtX{KmyAD-(rY8)v_)aRL zlIT}3ANx@3?rnjrK@`G?*-Qr^pICTjc6}5ZAi?BF9-tlO^m5pSA8MeI6w2%b4Rvu@ znPmsf?I1}9ce8n=BH9nF@nPeWeUl)+&~j0_J!2`)>0yTe3aS%r$iK-Tt}vaz>AB^# z)cRs^nR`unaIW=+tWBKpLJiCa&IOr{zTFtC9~V}UQq>%!;>}`ToEUQF3tt#wn zGvysNZr&_M)@(Bc(Anb;4TP%kQXj#B2hL&ytekhSMlqYO%o7`{$NGC=p*YlsaZvyw z^xCEMKqi~39b^xbRnByQ3Ezy`Q*k$oeIh}2mFq$yBIpgl1?TI1mm3P@C9*8?3C`Ze zCH6^RFYZk>F|n5&r<1B}M%M3ohrt*!l)1R++h zvjO{J0`}*a0|AC>t`rPrnbFF%M})cW0S+?2^jEUCS?ETdyZ;Ow?P^IdM)zEku;j?l zIf0~E)k$-zhY_Jl3F8Mu=hiCx?K_LS2!!+|>~T9$x5Z^7ruSKOKv-5C4;)J_-=)eW zWe&JkDWGrGN$>F}JIj}`yY$rtv+BscjHUd|IBy=-$xw%8SALKoA26ZVrr9 z*hDu+GWwHSxMOTzq*dmJ;dZ0)EY>cs}@O3Dg))W>jxG2)pwm|3wGZP{UD=X?vz<2d% z($G7RL!Uc@c=W{1528Y;L@}`}nuy4uR8XBoh?Wg5(BMoU3Pe*uvMUF_247bRT)u7) zFGlR}b0C!WzjfuB9+(9EVoelbiY>GqpF=MB?>C~HYYGN&yRx-;-Hvivirt}^<)>ds z+(T!nlisY!n-xD~+llk>#{M|YyF9L3&>TcQAZ0rr9ZOzPoy(q_F_YqJ+C*b&i0MnE zlTQ&(oYMk{fM9CU^(S#Ho1vzE&=}I*f6uZJGu3Q;s{&(G5N^FNkO{-~uIf!%1%_dH zNmpHq$`9YXvNus)1@bn9*GuA~gy`VH>C6u8V zTo3&fN%|}cB2I`QI{U8MMVdyW`2&0rs?}|nDg%y~QlmH}gi0NYFfpf2b-6?5y95g4 zyK$7X$k?LO-dU7pMtLfBhGnK%$SeGO`htRLITFPT>8N(2GwCqytWyPB!cu%374?W} zVSwG?{ZM+A8&&p|(V=75gxP4^)?P8VEm7>BU7q84x^#Uw1T9CVT{%~;wltOE$uxbY zWAifJ;*rU1D=!F=Zvcs5PITyw4jtWgabcC^iBxyQ}Za|*8p zjo>UFrKc)h7>hnahvh&V>Ugs$lbUZEt->h^3VveT1;>lkLV>&=AFa$^4oQRPPxCX` z7lot53<7Z_ymBKOm3-MsHS$P`Q!g;ldUsiyp;wual)sJw&?#Xn{MwT~D9|bN-Q}AE z>=w}}*tplQl>rVk(@3ohzffSWI{u0AvSO(kD%GY(tbIDqzShq`6jLHGTTn+4b4_xOuN0ZuWKL@LNI>`#AGl5dhy8qWw|rAkjE_fezq z`?YHp(D0e~X#ocNGQ{9T`WMh^r}A&ADXLg{to&#bWhZOTSGG?9jb#i$8#^8>;@xWO z=FoP=^v7%86gCw#Ha;wHhAlr(zQG8Oio5&aCT@yn+}PyHacHeVdlXyfM?K6S*i+i6 zY(W!Py1mX-+NEtZ48*Vy;&KP&Q{;Fl$AaY?v~?BxC4oIeKsH(a{35^tDXJb~I|mk{ zC7tO}W-xtc)#G06Ufzahw`gE54_hkY)(*;I><((zk#L!#tO+7k4zfLgWOP%3;~>Xc z0oin@{hl5Jal#t`0_hLk-(wE`n5jI;f9ESHHrn+Fb)Gl61Bk>gp#CVeS4UM0rsB>3 z`XqX4_Tn7{e=?XEws14B@gFHE2{!ry%7`>)e;a}%eTrQEhG7DHI=T=(BKfRkh8CVX zP`yD>hY}Jl5nnH&_<;;*($EA&f8KP%lRO=(llkXx`B)x{U4wRdOU>7)gzcf()wu)5 z;yV@tO7$Q43Ay`VnZkcs9vGM^{7!~t@l|*mL`nJrOhAdHokCwytw5T@$*)DTHl4eE zsS*bti~tts=9G`)($!6pL1`5?udY*sPZVl2)-Z>Sk_9gAR1=jv%kxocJ2HfMoG>&~ zImgCtKXdx$ezI->x~F+$MvMgd$Hsg!lsQ-2LvOoZSr}+-NwnpbJFH^=9JE zegAF`A=37LO+4Fh=(N{Xb$h&IZn@mzN4@^Yjwh7W+0%Z5=BkJn@rNWGE+gx6R0x{I zfd{!U(Grr1hNcq-jVG!ybT>2wZvtE)*HU4VZRG9%Lvv(j@uWR40jwdXr7Voa7Fcnf zS!biVN)OfxI4r&zs6;ijR0nS0uU|hCQhMhDpmugCKo%e2?n%v7?L5|hxekfS^)c<1XxXQxU<|BJLp+w7~rQU69G& zk}wp-B-yjW1QC$V0b4?9GNecIJGCqyhve8l1knKxAg#_?x`Yb#*sy0FI(gY&kM`f; zJESL(p*S-vX8p~@hw)!1ApgbQ5>NVxV&NMjF=vIQQ8wvj&`l;~0suZCZTpP@mn${K z0+m@{5kzbtc7Aex9eMw2K=7~pLo2c&=1phm`&IaYKK@qQ<#jRTwzP(=;t$HdYNY!| z;Q?$Mo(1~HNj+?;1rC8pJQMt+F1+|-l#t3OMs}*XF*y&P${y5n8%4>UPKezLZ}9KS->bbkHHX=Nn%OYYevPObH*f_`RuPe0m|b{QLb5*MOsZ3M zU`F46x8ljvqUB;t#jAYAX#^AUYTCWpc+hMz1D*&~yl^Z-%)E44P|D_+fnAH@Xy&wM@P> zI4gj5#J*Q?B3KyzWWe8G{+(^+CMPz$y|H!c`#yu;rw3d2c;>CKJ>>c4k^^VkPDaw< zE@V@XvF#`n*1%vNyk3q% zw|$_;(^_!7FS)QM<9zzFsED!>K|2^r&@Ys{oW!3Tye$GCLkw&gvVP(-;=`pu8H@oj zZyA3weyYd%XMR!YyR+sis4v)wUw++sWeR*->hS>wk-Y_7*ALG13ifyO`W`eDo*S6o z=^peMrrXt=_rMOIDTUE?T{PAytB6d7!~}#1;B;^T#da8K?pIpGA+q)g!{}c$`);5g z6_=NiQyo2f#BwF-+~zNhtq5ciDx+N$iSX+Pv0T|*!rOrf<^2TQfQO=%zb>w3emTGH z;*Q|Pjp2@SXbjnU>#m17;(XaD3msdCd7lmMZ=ZVtd`9uNKh<6MxfYDSh?<-f55Q4W z24mTQiFrqR!4JQHOX45($N_tEc5@xzfL=7}Cr&_bS)w6b%-=uB(mOUH&F;y#-sW#I z)JAV4CyOeiF=Am93Dv}jN-=-nUu5@SmFJh-ZD{rv2&|yo3%X8DbkXK zBbQxblGyX|r_pMJwY*?F_b-!A{TMJGNQb$h?>(!B^gM0kZTsVlcSAyK#{svQ_-fie zw%zTE3AaqnaF)dOk!0Ya&3ycI_WtcHkn!jdyoYRjZa3Kvp+TNJ(!hpiBN7c}Oau(r zjkAzBSaCT$1iTlmH+3pXdXd4&Oz-gvs4-wadHo&uUMcMV`~yve;p{aIrMptulp| zS*Y9pJ$Qc?>%^u5+~FFk-Sg)t?!1Tk5piv&^~b}t4&6D^oy)dW(6%de?(2fI^7kF$ z_m?_f&zMBSj=a!1R#rP*k3Oz%uhM%NwaiGFn_wr0c0_;*i2ClpV=dwzPn+mmIyL!; zR{gG!N;Tr8EEK))rfY8~J-4$`BQtAr>aokX6R9x2VYvX?2GX_?vyJ|dN)cp7(uYf! z;v2gp#zJp&vgUPiiLiQa6&VNYqi+lo9kqD80Uqpvsr=gmo78T#l@eJhx7PTC&@ z^4FVjWS{SjuZlbWtX{K>`w{Ss(8&7t08q_iEsw7S6A3=aGZJX!^y^d6JwhLZ06^S4 zT}wU;oWgkENruy9yT#*Y^Ou~)E8bC!ct@RUsK zQBo%56a!Cak#*kRrRhKLh+T5i^R0Gnb=Jz$N$+_^Q0WQ1(t*s(FqLcMP~*P#?Hvs^ zk3BbxJZJQZ7DMt22Ic|p#r)!#vJ)2i73xL4>QhGquMF%f7B~dc5V@ks8?@;g=d}MQmEVg zVukY0$ET(5-cwKHI~@20)Fxr4=kA2o?NfN^hsMpUC6w1Z^iH#XfmWxP9YqYjc-dD% zL*+v}A>uI-L7G-d4G6nCGIft+J%9Tsv^le6Rw*z9wu%{_?7L)!B#qA+Vgv#qsXP+M z5g---Xy?^gw3+j#%6mY8s=KF26Ql*Vf@e5Hzg2Bztc6m~Afi0}{yQLY^~C77;o`&F z_rjKNbrP`e_W%sI1{!z)pt+ootWabJI>vTR!mS?$EWOL0kp-KCI*yS;q45xJNY21A zBZ4p&Cs2nvIb=pJlH?KQ5>JB{ijTm@hRztd_>elO2=V(Z`Jg4syjO+*Xf18u8+jFjxL|gj<$btI{qPdtO7w5$5*QM zN`KDTY!y1t2~C9|nbbFuw4&-obv9ECNz+4<~<;-rGyCg+S-RUXKIe z5CK2#Lly!4UU~={+)$caH`Ukg!Xp%2*+_-l#udpJpQ>^Z#V+Xg>TxQmtji`~mH8C> zhG+)N8)CFAv?v(tB(%9EO)*ICOlMPu@cQ2yt6k4;=-7C-?=N0T)KBqd8xOz0xRthX zs`d5#UChjOCzA# zkgQAF3t(4ZwyQzJ`{iIkjRBuY_>L2)Vyx;zNe5m(WqfnX%IbLb&B^V!*v@9ni$<=<|5sG;V4$x^z$TtRrYxDRhW$( z0B@7`LhsbkNB7`|H=Fv86FapvM7%wZzmAX{Ym%wPag2(ah8(?#GjwcpkH(wLCRMnG z-vu%HnwL&@elmD9%O$dzB#PW!loy?n*gN)jDKi9TY_@3T8d%i+k zT>^2n*`Z#{G5C6gJcU2^l(9Et?VFNsdXgAsHGN+PH0Y!e)OcqYeTTK>D2Ny_;FSxZ zkrr`1*o2dFeIFDZO9&xqt5 z55XO?u{pjPQ70n55Sg<5DGNoUf@8pNA=%)}Fve&Sevtg{8lscHijH(%)1&YA8h;Db z($wi40HyN4{$4jw7WPTX0674Sg4*ND(YI%f(lh`2VgC;^`JcNK7xaCD6VVH?rTO&_ R{}+4>kd;)Ds1Y*?`G30AnK}Rf literal 0 HcmV?d00001 diff --git a/docs/favicon/android-chrome-512x512.png b/docs/favicon/android-chrome-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..e46db077a694564fdfce91624eee16cddb843415 GIT binary patch literal 154886 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 z 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μ><0321_|23^%N`+= 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 }$gKA@xRo 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 literal 0 HcmV?d00001 diff --git a/docs/favicon/favicon-16x16.png b/docs/favicon/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..59a58e0f545aba06aafb8d0a7bd16f7c05032854 GIT binary patch literal 718 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 uE(V + + + + + + + + + + + + + Learning Rust Β· Rust Programming Language Tutorials for Everyone! + + + + + + + + + + + + + + +

+
+ +
+ +
+
+
+
+

Rust Illuminated.Grasp Quickly.

+

Rust Programming Language Tutorials for Everyone!

+
+ +
+
+
+ +
+
πŸ§‘β€πŸ’»Built by and copyrightDumindu MadunuwanπŸ“… 2016-2023πŸš€ GitHub
+
+ +
+
+
+ +
+ + + \ No newline at end of file diff --git a/docs/index.xml b/docs/index.xml new file mode 100644 index 0000000..6e8a314 --- /dev/null +++ b/docs/index.xml @@ -0,0 +1,299 @@ + + + + Learning Rust + https://learning-rust.github.io/ + Recent content on Learning Rust + Hugo -- gohugo.io + en-US + + + Borrowing + https://learning-rust.github.io/docs/borrowing/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/borrowing/ + In real life applications, most of the times we have to pass variable bindings to other functions or assign them to other variable bindings. In this case, we are referencing the original binding; borrow the data of it. +What is Borrowing? Borrow (verb) +To receive something with the promise of returning it. +Shared &amp; Mutable borrowings ⭐️ There are two types of Borrowing, +Shared Borrowing (&amp;T) +A piece of data can be borrowed by a single or multiple users, but data should not be altered. + + + Cargo, Crates and Basic Project Structure + https://learning-rust.github.io/docs/cargo-crates-and-basic-project-structure/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/cargo-crates-and-basic-project-structure/ + Cargo Cargo is Rust’s built-in package manager and the build system. It can be used to, +Create a new project: cargo new Create a new project in an existing directory: cargo init Build the project: cargo build Run the project: cargo run Update project dependencies: cargo update Run tests: cargo test Run benchmarks: cargo bench Generate the project documentation via rustdoc: cargo doc Analyze the project to see it has any errors, without building it: cargo check In addition, there are cargo commands to publish the project as a crate/ package to Rust&rsquo;s official crate registry, crates. + + + Code Organization + https://learning-rust.github.io/docs/code-organization/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/code-organization/ + When a single code block is getting larger, it should be decomposed into smaller pieces and should be organized in a proper manner. Rust supports different levels of code organization. +1. Functions 2. Modules Can be mapped to a, +Inline module File Directory hierarchy 3. Crates Can be mapped to a, +lib.rs file on the same executable crate +Dependency crate specified on Cargo.toml +Can be specified from, +Path Git repository crates. + + + Combinators + https://learning-rust.github.io/docs/combinators/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/combinators/ + What is a combinator? One meaning of β€œcombinator” is a more informal sense referring to the combinator pattern, a style of organizing libraries centered around the idea of combining things. Usually there is some type T, some functions for constructing β€œprimitive” values of type T, and some β€œcombinators” which can combine values of type T in various ways to build up more complex values of type T. The other definition is &ldquo;function with no free variables&rdquo;. + + + Comments and Documenting the code + https://learning-rust.github.io/docs/comments-and-documenting-the-code/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/comments-and-documenting-the-code/ + Comments // Line comments /* Block comments */ Nested block comments are supported. +πŸ’‘ By convention, try to avoid using block comments. Use line comments instead. +Doc Comments As we discussed, we can generate the project documentation via rustdoc by running the cargo doc command. It uses the doc comments to generate the documentation. +πŸ’‘ Usually we are adding doc comments on library crates. Also, we can use Markdown notations inside the doc comments. + + + Control Flows + https://learning-rust.github.io/docs/control-flows/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/control-flows/ + if - else if - else Using only if block. let age = 13; if age &lt; 18 { println!(&#34;Hello, child!&#34;); // The code prints this } Using only if and else blocks. let i = 7; if i % 2 == 0 { println!(&#34;Even&#34;); } else { println!(&#34;Odd&#34;); // The code prints this } Using with let statement. let age: u8 = 13; let is_below_eighteen = if age &lt; 18 { true } else { false }; // true More examples, // i. + + + Crates + https://learning-rust.github.io/docs/crates/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/crates/ + πŸ’­ Crates are a bit similar to the packages in some other languages. Crates compile individually. If the crate has child file modules, those files will get merged with the crate file and compile as a single unit. +πŸ’­ A crate can produce an executable/ a binary or a library. src/main.rs is the crate root/ entry point for a binary crate and src/lib.rs is the entry point for a library crate. + + + Custom Error Types + https://learning-rust.github.io/docs/custom-error-types/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/custom-error-types/ + Rust allow us to create our own Err types. We call them β€œCustom Error Types”. +Error trait As you know traits define the functionality a type must provide. But we don’t always need to define new traits for common functionalities, because Rust standard library provides reusable traits which can be implemented on our own types. While creating custom error types the std::error::Error trait helps us to convert any type to an Err type. + + + Enums + https://learning-rust.github.io/docs/enums/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/enums/ + ⭐️ An enum is a single type. It contains variants, which are possible values of the enum at a given time. For example, +enum Day { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday } // The `Day` is the enum // Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday are the variants ⭐️ Variants can be accessed throughΒ :: notation, ex. Day::Sunday +⭐️ Each enum variant can have, +No data (unit variant) Unnamed ordered data (tuple variant) Named data (struct variant) enum FlashMessage { Success, // A unit variant Warning{ category: i32, message: String }, // A struct variant Error(String) // A tuple variant } fn main() { let mut form_status = FlashMessage::Success; print_flash_message(form_status); form_status = FlashMessage::Warning {category: 2, message: String::from(&#34;Field X is required&#34;)}; print_flash_message(form_status); form_status = FlashMessage::Error(String::from(&#34;Connection Error&#34;)); print_flash_message(form_status); } fn print_flash_message(m : FlashMessage) { // Pattern matching with enum match m { FlashMessage::Success =&gt; println! + + + Error and None Propagation + https://learning-rust.github.io/docs/error-and-none-propagation/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/error-and-none-propagation/ + We should use panics like panic!(), unwrap(), expect() only if we can not handle the situation in a better way. Also if a function contains expressions which can produce either None or Err, +we can handle them inside the same function. Or, we can return None and Err types immediately to the caller. So the caller can decide how to handle them. πŸ’‘ None types no need to handle by the caller of the function always. + + + Functions + https://learning-rust.github.io/docs/functions/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/functions/ + Named functions Named functions are declared with the keyword fn When using arguments, you must declare the data types. By default, functions return an empty tuple/ (). If you want to return a value, the return type must be specified after -&gt; i. Hello world fn main() { println!(&#34;Hello, world!&#34;); } ii. Passing arguments fn print_sum(a: i8, b: i8) { println!(&#34;sum is: {}&#34;, a + b); } iii. Returning values // 01. + + + Functions (02) + https://learning-rust.github.io/docs/functions-02/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/functions-02/ + Functions are the first line of organization in any program. +fn main() { greet(); // Do one thing ask_location(); // Do another thing } fn greet() { println!(&#34;Hello!&#34;); } fn ask_location() { println!(&#34;Where are you from?&#34;); } We can add unit tests in the same file. +fn main() { greet(); } fn greet() -&gt; String { &#34;Hello, world!&#34;.to_string() } #[test] // Test attribute indicates this is a test function fn test_greet() { assert_eq! + + + Generics + https://learning-rust.github.io/docs/generics/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/generics/ + πŸ“– Sometimes, when writing a function or data type, we may want it to work for multiple types of arguments. In Rust, we can do this with generics. +πŸ’­ The concept is, instead of declaring a specific data type we use an uppercase letter(or PascalCase identifier). ex, instead of xΒ : u8 we use xΒ : TΒ . but we have to inform to the compiler that T is a generic type(can be any type) by adding &lt;T&gt; at first. + + + Hello World + https://learning-rust.github.io/docs/hello-world/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/hello-world/ + Hello, World! fn main() { println!(&#34;Hello, world!&#34;); } fn means function. The main function is the beginning of every Rust program. +println!() prints text to the console and its ! indicates that it’s a macro rather than a function. +πŸ’‘ Rust files should have .rs file extension and if you’re using more than one word for the file name, follow the snake_case convention. +Save the above code in file.rs , but it can be any name with . + + + Impls & Traits + https://learning-rust.github.io/docs/impls-and-traits/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/impls-and-traits/ + πŸ’‘ When we discussed about C-like structs, I mentioned that those are similar to classes in OOP languages but without their methods. impls are used to define methods for Rust structs and enums. +πŸ’‘ Traits are kind of similar to interfaces in OOP languages. They are used to define the functionality a type must provide. Multiple traits can be implemented for a single type. +⭐️️ But traits can also include default implementations of methods. + + + Installation + https://learning-rust.github.io/docs/installation/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/installation/ + Rustup There are many ways to install Rust on your system. For the moment the official way to install Rust is using Rustup. +πŸ“– Rustup installs The Rust Programming Language from the official release channels, enabling you to easily switch between stable, beta, and nightly compilers and keep them updated. It makes cross-compiling simpler with binary builds of the standard library for common platforms. +πŸ“– Rustup installs rustc, cargo, rustup and other standard tools to Cargo&rsquo;s bin directory. + + + Lifetimes + https://learning-rust.github.io/docs/lifetimes/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/lifetimes/ + When we are dealing with references, we have to make sure that the referencing data stay alive until we stop using the references. +Think, +We have a variable binding, a. We are referencing the value of a, from another variable binding x. We have to make sure that a lives until we stop using x. πŸ”Ž Memory management is a form of resource management applied to computer memory. Up until the mid-1990s, the majority of programming languages used Manual Memory Management which requires the programmer to give manual instructions to identify and deallocate unused objects/ garbage. + + + Modules + https://learning-rust.github.io/docs/modules/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/modules/ + 01. In the same file Related code and data are grouped into a module and stored in the same file. +fn main() { greetings::hello(); } mod greetings { // ⭐️ By default, everything inside a module is private pub fn hello() { // ⭐️ So function has to be public to access from outside println!(&#34;Hello, world!&#34;); } } Modules can also be nested. +fn main() { phrases::greetings::hello(); } mod phrases { pub mod greetings { pub fn hello() { println! + + + Operators + https://learning-rust.github.io/docs/operators/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/operators/ + Arithmetic Operators + - * / % +let a = 5; let b = a + 1; //6 let c = a - 1; //4 let d = a * 2; //10 let e = a / 2; // ⭐️ 2 not 2.5 let f = a % 2; //1 let g = 5.0 / 2.0; //2.5 Comparison Operators == != &lt; &gt; &lt;= &gt;= +let a = 1; let b = 2; let c = a == b; //false let d = a ! + + + Option and Result + https://learning-rust.github.io/docs/option-and-result/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/option-and-result/ + Why Option and Result? Many languages use null\ nil\ undefined types to represent empty outputs, and Exceptions to handle errors. Rust skips using both, especially to prevent issues like null pointer exceptions, sensitive data leakages through exceptions and etc. Instead, Rust provides two special generic enums;Option and Result to deal with above cases. +πŸ’­ In the previous sections, we have discussed about the basics of enums, generics and Result &amp; Option types. + + + Overview + https://learning-rust.github.io/docs/overview/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/overview/ + This is based on the posts I wrote on Medium, https://medium.com/learning-rust +🐣 I am a Sri Lankan πŸ‡±πŸ‡° Web Developer who lives in Singapore πŸ‡ΈπŸ‡¬. So I am not a native English speaker and just learning Rust, If you found any mistake or something need to be changed, even a spelling or a grammar mistake, feel free to create a pull request. Thanks. + + + Ownership + https://learning-rust.github.io/docs/ownership/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/ownership/ + fn main() { let a = [1, 2, 3]; let b = a; println!(&#34;{:?} {:?}&#34;, a, b); // [1, 2, 3] [1, 2, 3] } fn main() { let a = vec![1, 2, 3]; let b = a; println!(&#34;{:?} {:?}&#34;, a, b); // Error; use of moved value: `a` } In the above examples, we are just trying to assign the value of a to b . Almost the same code in both code blocks, but having two different data types. + + + Panicking + https://learning-rust.github.io/docs/panicking/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/panicking/ + panic!() In some cases, when an error occurs we can not do anything to handle it, if the error is something which should not have happened. In other words, if it’s an unrecoverable error. Also when we are not using a feature-rich debugger or proper logs, sometimes we need to debug the code by quitting the program from a specific line of code by printing out a specific message or a value of a variable binding to understand the current flow of the program. + + + Primitive Data Types + https://learning-rust.github.io/docs/primitive-data-types/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/primitive-data-types/ + bool true or false +let x = true; let y: bool = false; // ⭐️ no TRUE, FALSE, 1, 0 char A single Unicode scalar value +let x = &#39;x&#39;; let y: char = &#39;😎&#39;; // ⭐️ no &#34;x&#34;, only single quotes Because of Unicode support, char is not a single byte, but four(32 bits). +i8, i16, i32, i64, i128 8, 16, 32, 64 and 128 bit fixed sized signed(+/-) integer types + + + Smart Compiler + https://learning-rust.github.io/docs/smart-compiler/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/smart-compiler/ + Why Compiler? The Rust compiler does the most significant job to prevent errors in Rust programs. It analyzes the code at compile-time and issues warnings, if the code does not follow memory management rules or lifetime annotations correctly. +For example, +#[allow(unused_variables)] //πŸ’‘ A lint attribute used to suppress the warning; unused variable: `b` fn main() { let a = vec![1, 2, 3]; let b = a; println!(&#34;{:?}&#34;, a); } // ------ Compile-time error ------ error[E0382]: use of moved value: `a` --&gt; src/main. + + + STD, Primitives and Preludes + https://learning-rust.github.io/docs/std-primitives-and-preludes/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/std-primitives-and-preludes/ + ⭐️ In Rust, language elements are implemented by not only std library crate but also compiler as well. Examples, +Primitives: Defined by the compiler and methods are implemented by std library directly on primitives. Standard Macros: Defined by both compiler and std The std library has been divided into modules, according to the main areas each covered. +⭐️ While primitives are implemented by the compiler, the standard library implements the most useful methods directly on the primitive types. + + + Structs + https://learning-rust.github.io/docs/structs/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/structs/ + ⭐️ Structs are used to encapsulate related properties into one unified data type. +πŸ’‘ By convention, the name of the struct should follow PascalCase. +There are 3 variants of structs, +C-like structs One or more comma-separated name:value pairs Brace-enclosed list Similar to classes (without its methods) in OOP languages Because fields have names, we can access them through dot notation Tuple structs One or more comma-separated values A parenthesized list like tuples Looks like a named tuples Unit structs A struct with no members at all It defines a new type but it resembles an empty tuple, () Rarely in use, useful with generics ⭐️ When regarding OOP in Rust, attributes and methods are placed separately on structs and traits. + + + Unwrap and Expect + https://learning-rust.github.io/docs/unwrap-and-expect/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/unwrap-and-expect/ + unwrap() If an Option type has Some value or a Result type has a Ok value, the value inside them passes to the next step. If the Option type has None value or the Result type has Err value, program panics; If Err, panics with the error message. The functionality is bit similar to the following codes, which are using match instead unwrap(). +Example with Option and match, before using unwrap() + + + Use + https://learning-rust.github.io/docs/use/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/use/ + Let&rsquo;s see the main usages of the use keyword. +01. Bind a full path to a new name Mainly use keyword is used to bind a full path of an element to a new name. So the user doesn’t want to repeat the full path each time. +// -- Initial code without the `use` keyword -- mod phrases { pub mod greetings { pub fn hello() { println!(&#34;Hello, world!&#34;); } } } fn main() { phrases::greetings::hello(); // Using full path } // -- Usage of the `use` keyword -- // 01. + + + Variable bindings, Constants & Statics + https://learning-rust.github.io/docs/variable-bindings-constants-and-statics/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/variable-bindings-constants-and-statics/ + Variable bindings, Constants &amp; Statics ⭐️ In Rust, variables are immutable by default, so we call them Variable bindings. To make them mutable, the mut keyword is used. +⭐️ Rust is a statically typed language; it checks data types at compile-time. But it doesn’t require you to actually type it when declaring variable bindings. In that case, the compiler checks the usage and sets a better data type for it. But for constants and statics, you must annotate the type. + + + Vectors + https://learning-rust.github.io/docs/vectors/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/vectors/ + If you remember, the array is a fixed-size list of elements, of the same data type. Even with mut, its element count cannot be changed. A vector is kind of a re-sizable array but all elements must be in the same type. +⭐️ It’s a generic type, written as Vec&lt;T&gt;Β . T can have any type, ex. The type of a Vec of i32s is Vec&lt;i32&gt;. Also, Vectors always allocate their data in a dynamically allocated heap. + + + Why Rust? + https://learning-rust.github.io/docs/why-rust/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/why-rust/ + History of Rust Rust was initially designed and developed by former Mozilla employee Graydon Hoare as a personal project. Mozilla began sponsoring the project in 2009 and announced it in 2010. But the first stable release, Rust 1.0 was released on May 15, 2015. +Initial Goals The goal of Rust is to be a good programming language for creating highly concurrent, safe and performant systems. +&ldquo;Rust is a systems programming language focused on three goals: safety, speed, and concurrency. + + + Workspaces + https://learning-rust.github.io/docs/workspaces/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://learning-rust.github.io/docs/workspaces/ + When the code base is getting larger, you might need to work with multiple crates on the same project. Rust supports this via Workspaces. You can analyze (cargo check), build, run tests or generate docs for all crates at once by running cargo commands from the project root. +⭐️ When working on multiple crates same time, there is a higher possibility of having shared dependencies on crates. To prevent downloading and compiling the same dependency multiple times, Rust uses a shared build directory under the project root, while running cargo build from the project root. + + + diff --git a/docs/manifest.json b/docs/manifest.json new file mode 100644 index 0000000..87493f4 --- /dev/null +++ b/docs/manifest.json @@ -0,0 +1,21 @@ +{ + "name": "Learning Rust", + "short_name": "Learning Rust", + "description": "Rust Programming Language Tutorials for Everyone!", + "start_url": "/?source=pwa", + "display": "standalone", + "icons": [ + { + "src": "/favicon/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/favicon/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ], + "background_color": "#866ee7", + "theme_color": "#866ee7" +} \ No newline at end of file diff --git a/docs/sitemap.xml b/docs/sitemap.xml new file mode 100644 index 0000000..8d767c1 --- /dev/null +++ b/docs/sitemap.xml @@ -0,0 +1,114 @@ + + + + https://learning-rust.github.io/docs/borrowing/ + 2022-10-17T01:47:29+08:00 + + https://learning-rust.github.io/docs/cargo-crates-and-basic-project-structure/ + 2022-10-22T16:55:03+08:00 + + https://learning-rust.github.io/categories/ + + https://learning-rust.github.io/docs/code-organization/ + 2022-10-22T16:55:03+08:00 + + https://learning-rust.github.io/docs/combinators/ + 2022-10-17T01:47:29+08:00 + + https://learning-rust.github.io/docs/comments-and-documenting-the-code/ + 2022-12-27T12:13:26+00:00 + + https://learning-rust.github.io/docs/control-flows/ + 2022-10-17T01:47:29+08:00 + + https://learning-rust.github.io/docs/crates/ + 2022-10-17T01:47:29+08:00 + + https://learning-rust.github.io/docs/custom-error-types/ + 2022-10-17T01:47:29+08:00 + + https://learning-rust.github.io/docs/ + 2023-06-25T15:48:47+08:00 + + https://learning-rust.github.io/docs/enums/ + 2022-10-17T01:47:29+08:00 + + https://learning-rust.github.io/docs/error-and-none-propagation/ + 2022-10-17T01:47:29+08:00 + + https://learning-rust.github.io/docs/functions/ + 2022-10-17T01:47:29+08:00 + + https://learning-rust.github.io/docs/functions-02/ + 2022-10-17T01:47:29+08:00 + + https://learning-rust.github.io/docs/generics/ + 2022-10-22T16:55:03+08:00 + + https://learning-rust.github.io/docs/hello-world/ + 2022-10-22T16:55:03+08:00 + + https://learning-rust.github.io/docs/impls-and-traits/ + 2022-10-22T16:55:03+08:00 + + https://learning-rust.github.io/docs/installation/ + 2022-10-22T16:55:03+08:00 + + https://learning-rust.github.io/ + 2023-06-25T15:48:47+08:00 + + https://learning-rust.github.io/docs/lifetimes/ + 2022-10-17T01:47:29+08:00 + + https://learning-rust.github.io/docs/modules/ + 2022-10-17T01:47:29+08:00 + + https://learning-rust.github.io/docs/operators/ + 2022-10-22T16:55:03+08:00 + + https://learning-rust.github.io/docs/option-and-result/ + 2022-10-17T01:47:29+08:00 + + https://learning-rust.github.io/docs/overview/ + 2023-06-25T15:48:47+08:00 + + https://learning-rust.github.io/docs/ownership/ + 2022-10-17T01:47:29+08:00 + + https://learning-rust.github.io/docs/panicking/ + 2022-10-17T01:47:29+08:00 + + https://learning-rust.github.io/docs/primitive-data-types/ + 2022-10-22T16:55:03+08:00 + + https://learning-rust.github.io/docs/smart-compiler/ + 2022-10-17T01:47:29+08:00 + + https://learning-rust.github.io/docs/std-primitives-and-preludes/ + 2022-10-17T01:47:29+08:00 + + https://learning-rust.github.io/docs/structs/ + 2022-10-17T01:47:29+08:00 + + https://learning-rust.github.io/tags/ + + https://learning-rust.github.io/docs/unwrap-and-expect/ + 2022-10-17T01:47:29+08:00 + + https://learning-rust.github.io/docs/use/ + 2022-10-17T01:47:29+08:00 + + https://learning-rust.github.io/docs/variable-bindings-constants-and-statics/ + 2022-12-27T12:13:26+00:00 + + https://learning-rust.github.io/docs/vectors/ + 2022-10-22T16:55:03+08:00 + + https://learning-rust.github.io/docs/why-rust/ + 2022-10-22T16:55:03+08:00 + + https://learning-rust.github.io/docs/workspaces/ + 2022-10-17T01:47:29+08:00 + + diff --git a/docs/sw.js b/docs/sw.js new file mode 100644 index 0000000..f115dc0 --- /dev/null +++ b/docs/sw.js @@ -0,0 +1,55 @@ +const cacheName = 'learning-rust-{{ now.Format "2006-01-02" }}'; +const staticAssets = [ + './', + './index.html', + './manifest.json', + './docs/**/*', + './favicon/android-chrome-192x192.png', + './favicon/android-chrome-512x512.png', + './favicon/apple-touch-icon.png', + './favicon/favicon.ico', + './favicon/favicon-16x16.png', + './favicon/favicon-32x32.png', + './css/home.min.css', + './css/docs.min.css', + './js/docs.min.js', +]; + +self.addEventListener('install', async e => { + const cache = await caches.open(cacheName); + await cache.addAll(staticAssets); + return self.skipWaiting(); +}); + +self.addEventListener('activate', e => { + self.clients.claim(); +}); + +self.addEventListener('fetch', async e => { + const req = e.request; + const url = new URL(req.url); + + if (url.origin === location.origin) { + e.respondWith(cacheFirst(req)); + } else { + e.respondWith(networkFirst(req)); + } +}); + +async function cacheFirst(req) { + const cache = await caches.open(cacheName); + const cached = await cache.match(req); + return cached || fetch(req); +} + +async function networkFirst(req) { + const cache = await caches.open(cacheName); + try { + const fresh = await fetch(req); + cache.put(req, fresh.clone()); + return fresh; + } catch (e) { + const cached = await cache.match(req); + return cached; + } +} \ No newline at end of file diff --git a/docs/tags/index.xml b/docs/tags/index.xml new file mode 100644 index 0000000..e0ab900 --- /dev/null +++ b/docs/tags/index.xml @@ -0,0 +1,11 @@ + + + + Tags on Learning Rust + https://learning-rust.github.io/tags/ + Recent content in Tags on Learning Rust + Hugo -- gohugo.io + en-US + + + From 91cfbd191c0cdd7276aead3449b313cc47d5b071 Mon Sep 17 00:00:00 2001 From: Dumindu Madunuwan Date: Wed, 6 Dec 2023 22:15:34 +0800 Subject: [PATCH 02/24] Sync stylesheets --- ...5bb7534667e8b6e4ac842dd1330bdc793b12b633d5413d263a72db4a.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/assets/css/docs.min.min.9deba2d55bb7534667e8b6e4ac842dd1330bdc793b12b633d5413d263a72db4a.css b/docs/assets/css/docs.min.min.9deba2d55bb7534667e8b6e4ac842dd1330bdc793b12b633d5413d263a72db4a.css index 9fbdde6..c522d05 100644 --- a/docs/assets/css/docs.min.min.9deba2d55bb7534667e8b6e4ac842dd1330bdc793b12b633d5413d263a72db4a.css +++ b/docs/assets/css/docs.min.min.9deba2d55bb7534667e8b6e4ac842dd1330bdc793b12b633d5413d263a72db4a.css @@ -1 +1 @@ -*:where(:not(html,iframe,canvas,img,svg,video,audio,pre,code):not(svg *,symbol *)){all:unset;display:revert}*,*::before,*::after{box-sizing:border-box}html{-moz-text-size-adjust:none;-webkit-text-size-adjust:none;text-size-adjust:none}a,button{cursor:revert}ol,ul,menu,summary{list-style:none}img{max-inline-size:100%;max-block-size:100%}table{border-collapse:collapse}input,textarea{-webkit-user-select:auto}textarea{white-space:revert}meter{-webkit-appearance:revert;appearance:revert}:where(pre){all:revert;box-sizing:border-box}::placeholder{color:unset}::marker{content:initial}:where([hidden]){display:none}:where([contenteditable]:not([contenteditable=false])){-moz-user-modify:read-write;-webkit-user-modify:read-write;overflow-wrap:break-word;-webkit-line-break:after-white-space;-webkit-user-select:auto}:where([draggable=true]){-webkit-user-drag:element}:where(dialog:modal){all:revert;box-sizing:border-box}pre,code{margin:0}::-webkit-details-marker{display:none}:root{--font-sans:ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-serif:ui-serif, Georgia, Cambria, "Times New Roman", Times, serif;--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--font-brand:"Arial", serif;--color:rgba(0, 0, 0, 1);--color-fade:rgba(0, 0, 0, .54);--color-nav:rgba(0, 0, 0, .7);--background:#ffffff;--background-grey:#f9f9f9;--background-grey-embed:#f0f0f0;--foreground:rgba(247, 247, 247, .25);--foreground-hover:rgba(220, 220, 220, .35);--foreground-highlight:#f5d41f;--color-highlight:#130606;--model-background:#ffffff;--model-foreground:rgba(247, 247, 247, .25);--model-box-shadow:0 8px 32px 0 rgba(31, 38, 135, .37);--padding:12px;--model-blur:10px;--border:#efefef;--border-nav:#dddddd;--radius:4px;--anchor:#235ce8;--hover:#547ce3;--chroma-base00:#f9f9f9;--chroma-base01:#e0e0e0;--chroma-base02:rgba(159, 218, 159, .2);--chroma-base03:#8e908c;--chroma-base04:#969896;--chroma-base05:#4d4d4c;--chroma-base06:#282a2e;--chroma-base07:#1d1f21;--chroma-base08:#c82829;--chroma-base09:#f5871f;--chroma-base0A:#eab700;--chroma-base0B:#718c00;--chroma-base0C:#3e999f;--chroma-base0D:#4271ae;--chroma-base0E:#8959a8;--chroma-base0F:#a3685a;--callout-info-backgound:#954ce3;--callout-info-color:#ffffff;--callout-info-anchor:#261627}:root[data-color=dark]{--color:rgba(255, 255, 255, 1);--color-fade:rgba(255, 255, 255, .5);--color-nav:rgba(255, 255, 255, .8);--background:#101010;--background-grey:#1e1e1e;--background-grey-embed:#2f2d2d;--foreground:rgba(19, 19, 19, 1);--foreground-hover:rgba(35, 35, 35, 1);--model-background:rgba(16, 16, 16, 1);--model-foreground:rgba(225, 225, 225, .05);--model-box-shadow:0 8px 32px 0 rgba(241, 235, 235, 0.1);--border:rgba(225, 225, 225, .1);--border-nav:rgba(255, 255, 255, .2);--anchor:#2e87f1;--hover:#044b9d;--chroma-base00:var(--background-grey)/*#080808*/;--chroma-base01:#393939;--chroma-base02:rgba(159, 218, 159, .1);--chroma-base03:#999999;--chroma-base04:#b4b7b4;--chroma-base05:#cccccc;--chroma-base06:#e0e0e0;--chroma-base07:#ffffff;--chroma-base08:#f2777a;--chroma-base09:#f99157;--chroma-base0A:#ffcc66;--chroma-base0B:#99cc99;--chroma-base0C:#66cccc;--chroma-base0D:#6699cc;--chroma-base0E:#cc99cc;--chroma-base0F:#a3685a}.site-logo{text-transform:uppercase;font-family:var(--font-brand);font-size:1.5em;color:transparent;-webkit-text-stroke:.5px var(--border);background:0 0;letter-spacing:3px;background:linear-gradient(45deg,#866ee7,#ea60da,#ed8f57,#fbd41d,#2cca91);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;font-weight:800}@media(min-width:2560px){body{zoom:1.2}}@media(min-width:3840px){body{zoom:1.6}}.btn{display:flex;padding:calc(var(--padding)/2);background:var(--foreground);border:1px solid var(--border);border-radius:var(--radius);gap:calc(var(--padding)/2);cursor:pointer;color:var(--color-nav)}.btn:hover{background:var(--foreground-hover)}html{scroll-behavior:smooth;scroll-padding:2em}body{display:flex;flex-direction:column;height:100%;color:var(--color);background:var(--background);font-family:var(--font-sans)}#outer-wrapper{display:flex}#aside-wrapper{width:85%;left:-85%;display:none;overflow-x:auto}#aside-wrapper>aside>div{display:flex;padding:var(--padding);justify-content:flex-end}#aside-wrapper>aside>a{display:none}#content-wrapper{display:flex;flex:1;flex-direction:column;min-height:100svh}main{display:flex;flex-direction:column;flex:1;width:100svw}#aside-wrapper.open{display:flex;flex-direction:column;position:fixed;top:0;height:100%;z-index:10;transition:.3s;animation:slide-in-left .3s forwards;background:var(--model-background);box-shadow:var(--model-box-shadow)}@keyframes slide-in-left{from{transform:translateX(0)}to{transform:translateX(100%)}}#content-wrapper>header{border-bottom:1px solid var(--border)}#content-wrapper>header>a{display:inline-block;padding:var(--padding)}#content-wrapper>footer{display:flex;flex-direction:column;padding:var(--padding)}#content-wrapper>footer>div{display:flex;align-items:center;justify-content:center;padding:var(--padding);gap:calc(var(--padding)/2);text-align:center;flex-wrap:wrap}#content-wrapper>footer>div:first-child{white-space:initial}#content-wrapper>footer>div:first-child a{background:var(--foreground-highlight);color:var(--color-highlight);border-radius:var(--radius);cursor:pointer;padding:0 calc(var(--padding)/2)}#content-wrapper>footer>div:nth-child(2){justify-content:flex-end}main>article{display:flex;flex:1;flex-direction:column}main>article>nav{display:flex;padding:calc(var(--padding) * 2)var(--padding)var(--padding);gap:12px;justify-content:space-between}main>article>header{padding:var(--padding)calc(var(--padding) * 2)}#article-body{display:flex;flex-direction:column;flex:1;padding:var(--padding)calc(var(--padding) * 2);overflow-x:auto}main>article>footer{display:grid;grid-template-columns:repeat(2,1fr);padding:0 calc(var(--padding) * 2)}main>article>footer>time{grid-column:1/3;display:flex;color:var(--color-fade);justify-content:center;padding:var(--padding)0;gap:calc(var(--padding)/2)}main>article>footer>a{display:flex;padding:var(--padding);gap:calc(var(--padding)/4);background:var(--foreground);color:var(--color-nav);border:1px solid var(--border);border-radius:var(--radius);cursor:pointer;width:50%}main>article>footer>a:hover{background:var(--foreground-hover)}main>article>footer>a.hidden{visibility:hidden}main>article>footer>a:last-child{display:flex;justify-content:end;margin-left:50%}main>aside{width:85%;right:-85%;display:none;overflow-x:auto}main>aside.open{display:flex;flex-direction:column;position:fixed;top:0;height:100%;z-index:10;transition:.3s;animation:slide-in-right .3s forwards;background:var(--model-background);box-shadow:var(--model-box-shadow)}#aside-wrapper{position:sticky;top:0}#aside-wrapper>aside>nav{padding:0 var(--padding)}#aside-wrapper>aside>nav>details{padding-bottom:0}#aside-wrapper>aside>nav>details[open]{padding-bottom:calc(var(--padding) * 1.5)}#aside-wrapper>aside>nav>details>summary{display:flex;padding:var(--padding)0;color:var(--color);font-weight:700}#aside-wrapper>aside>nav>details[open]>summary{color:var(--color-fade)}#aside-wrapper>aside>nav>details>ul>li{margin:0 calc(var(--padding)/2);border-left:1px solid var(--border-nav)}#aside-wrapper>aside>nav>details>ul>li>a{color:var(--color-nav);display:flex;cursor:pointer;padding:calc(var(--padding)/2)}#aside-wrapper>aside>nav>details>ul>li>a::before{content:'';display:inline-block;background:var(--background);width:calc(var(--padding)/2);height:calc(var(--padding)/2);transform:rotate(45deg);border:1px solid var(--border-nav);position:relative;left:calc((var(--padding) * -.78));top:3px}#aside-wrapper>aside>nav>details>ul>li>a.active{background:var(--foreground-highlight);color:var(--color-highlight);border-top-right-radius:var(--radius);border-bottom-right-radius:var(--radius)}#aside-wrapper>aside>nav>details>ul>li>a.active::before{background:var(--foreground-highlight);border:var(--foreground-highlight);left:calc((var(--padding) * -.76))}#aside-wrapper>aside>nav>details>ul>li>a:hover:not(.active){background:var(--foreground-hover);border-top-right-radius:var(--radius);border-bottom-right-radius:var(--radius)}main>aside>div{display:flex;padding:var(--padding)}main>aside>strong{display:flex;padding:var(--padding);color:var(--color-fade);font-weight:700}main>aside>nav{padding:0 var(--padding)}#TableOfContents ul{border-left:1px solid var(--border)}#TableOfContents a{color:var(--color-nav);display:inline-block;cursor:pointer;padding:calc(var(--padding)/2)}#TableOfContents a code{padding:calc(var(--padding)/3.7);border-radius:var(--radius);font-size:.9em}#TableOfContents ul a::before{content:'';display:inline-block;width:calc(var(--padding)/1.5);height:calc(var(--padding)/1.5);background:var(--background);border:1px solid var(--border-nav);position:relative;left:calc((var(--padding) * -.89));top:-3px;border-radius:30%;transform:rotate(45deg)}#TableOfContents a.active{background:var(--foreground-highlight);color:var(--color-highlight);border-top-right-radius:var(--radius);border-bottom-right-radius:var(--radius)}#TableOfContents ul a.active::before{background:var(--background)}#TableOfContents a:hover:not(.active){background:var(--foreground-hover);border-top-right-radius:var(--radius);border-bottom-right-radius:var(--radius)}#TableOfContents ul ul{margin-left:calc(var(--padding) * 1.75)}@keyframes slide-in-right{from{transform:translateX(0)}to{transform:translateX(-100%)}}body.model-open{overflow:hidden}#body-model-outer{display:none;content:"";position:fixed;top:0;left:0;width:100%;height:100%;z-index:5;background:var(--model-foreground);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}#aside-wrapper>aside>div .btn,main>aside>div>.btn{font-size:.75em;font-weight:800}@media(min-width:768px) and (max-width:1023px){#aside-wrapper{width:50%;left:-50%}main>aside{width:50%;right:-50%}}@media(min-width:1024px){:root{--padding:16px}main{flex-direction:row}main>article{width:75vw}main>aside{width:25%;display:flex;flex-direction:column;position:sticky;top:0;height:calc(100svh - 68px);overflow-x:auto}main>aside>div{display:none}main>article>nav>button:last-child{display:none}#content-wrapper>footer{padding:0 var(--padding);flex-direction:row}#content-wrapper>footer>div:first-child{width:75vw}#content-wrapper>footer>div:nth-child(2){width:25%}}@media(min-width:1024px) and (max-width:1279px){#aside-wrapper{width:33%;left:-33%}}@media(min-width:1280px){#aside-wrapper{width:20%;display:flex;flex-direction:column;height:100svh;background:var(--foreground);border-right:1px solid var(--border);overflow-x:auto}#aside-wrapper>aside>div{display:none}#aside-wrapper>aside>nav{overflow-x:auto}#content-wrapper>header{display:none}#aside-wrapper>aside>a{display:flex;padding:calc(var(--padding) * 2)var(--padding)}main{width:80svw;padding:0 calc(var(--padding) * 2)}main>article{width:60vw}main>article>nav{display:none}main>aside{width:25%}main>article>header{padding:calc(var(--padding) * 2)calc(var(--padding) * 2)var(--padding)}#content-wrapper>footer>div:first-child{width:60vw}#content-wrapper>footer>div:nth-child(2){width:25%}}main>article>header>h1{font-size:3em}main>article>header>p{font-size:1.25em;color:var(--color-fade);padding-top:var(--padding)}#article-body h1,#article-body h2,#article-body h3,#article-body h4,#article-body h5,#article-body h6{line-height:1em;font-weight:400;margin:2.6em 0 .1em;color:var(--color)}#article-body h1{font-size:1.8em}#article-body h2{font-size:1.5em}#article-body h3{font-size:1.3em}#article-body h4{font-size:1.1em}#article-body .highlight,#article-body blockquote,#article-body dl,#article-body iframe,#article-body ol,#article-body p,#article-body table,#article-body ul{margin-top:1em;line-height:1.8rem;letter-spacing:-.1px}#article-body blockquote p{margin:1em 0}#article-body blockquote dl,#article-body blockquote ol,#article-body blockquote ul{margin:0 1em 1em}#article-body a{color:var(--anchor);text-decoration:none}#article-body a:hover{color:var(--hover);text-decoration:underline}#article-body strong,#article-body b,#article-body table th{font-weight:600}#article-body em{font-style:italic}#article-body dl,#article-body ol,#article-body ul{margin-left:20px}#article-body dl dl,#article-body dl ol,#article-body dl ul,#article-body ol dl,#article-body ol ol,#article-body ol ul,#article-body ul dl,#article-body ul ol,#article-body ul ul{margin-top:0;margin-bottom:0}#article-body ul{list-style:disc}#article-body ol{list-style:decimal}#article-body dl{list-style:square}#article-body li>ul{list-style:circle}#article-body li>ol{list-style:lower-alpha}#article-body li p{margin:0}#article-body li .highlight,#article-body li blockquote,#article-body li iframe,#article-body li table{margin:1em 0}#article-body img,#article-body video{max-width:100%;border-radius:4px}#article-body blockquote{padding:8px 12px;position:relative;background:var(--background-grey);border-left-width:5px;border-radius:6px}#article-body blockquote footer{margin:1em 0;font-style:italic}#article-body blockquote footer cite:before{content:"β€”";padding:0 .3em}#article-body blockquote footer cite a{color:var(--border)}#article-body code,#article-body pre{font-family:var(--font-mono)}#article-body h1 code,#article-body h2 code,#article-body h3 code,#article-body h4 code,#article-body h5 code,#article-body h6 code,#article-body p code,#article-body blockquote code,#article-body ul code,#article-body ol code,#article-body dl code,#article-body table code{background:var(--background-grey);padding:calc(var(--padding)/3.7);border-radius:var(--radius);font-size:.9em}#article-body blockquote code{background:var(--background-grey-embed)}#article-body pre:not(.chroma){color:var(--chroma-base05);font-size:.9em;line-height:1.8;letter-spacing:-.1px;background-color:var(--chroma-base00);border-radius:6px;padding:16px 24px;overflow-x:auto;margin-top:1em}#article-body blockquote .chroma,#article-body blockquote pre:not(.chroma){background:var(--foreground-hover);margin-bottom:1em}#article-body blockquote .chroma code,#article-body blockquote pre:not(.chroma) code{padding:0}#article-body table{max-width:100%;border-radius:calc(var(--radius)*2);box-shadow:0 0 0 1px var(--border)}#article-body table td,#article-body table th{padding:5px 15px}#article-body table tr:nth-child(2n){background:var(--background-grey)}#article-body table thead tr{background:var(--background-grey-embed)}.chroma{font-size:.9em;color:var(--chroma-base05);background-color:var(--chroma-base00);border-radius:6px;padding:16px 24px;overflow-x:auto}.chroma .x{color:var(--chroma-base05)}.chroma .err{color:var(--chroma-base08)}.chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.chroma .lntable{border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block}.chroma .hl{display:block;width:100%;background-color:var(--chroma-base02)}.chroma .lnt{margin-right:.4em;padding:0 .4em}.chroma .ln{margin-right:.4em;padding:0 .4em;border-right:1px solid var(--chroma-base0A)}.chroma .line{display:flex}.chroma .k{color:var(--chroma-base0E)}.chroma .kc{color:var(--chroma-base0E)}.chroma .kd{color:var(--chroma-base0E)}.chroma .kn{color:var(--chroma-base0E)}.chroma .kp{color:var(--chroma-base0D)}.chroma .kr{color:var(--chroma-base0E)}.chroma .kt{color:var(--chroma-base0E)}.chroma .n{color:var(--chroma-base05)}.chroma .na{color:var(--chroma-base05)}.chroma .nb{color:var(--chroma-base0D)}.chroma .bp{color:var(--chroma-base0D)}.chroma .nc{color:var(--chroma-base0A)}.chroma .no{color:var(--chroma-base09)}.chroma .nd{color:var(--chroma-base09)}.chroma .ni{color:var(--chroma-base0A)}.chroma .ne{color:var(--chroma-base0A)}.chroma .nf{color:var(--chroma-base05)}.chroma .fm{color:var(--chroma-base05)}.chroma .nl{color:var(--chroma-base08)}.chroma .nn{color:var(--chroma-base0A)}.chroma .nx{color:var(--chroma-base0D)}.chroma .py{color:var(--chroma-base08)}.chroma .nt{color:var(--chroma-base0D)}.chroma .nv{color:var(--chroma-base0D)}.chroma .vc{color:var(--chroma-base0D)}.chroma .vg{color:var(--chroma-base0D)}.chroma .vi{color:var(--chroma-base08)}.chroma .vm{color:var(--chroma-base0D)}.chroma .l{color:var(--chroma-base0B)}.chroma .ld{color:var(--chroma-base0B)}.chroma .s{color:var(--chroma-base0B)}.chroma .sa{color:var(--chroma-base0B)}.chroma .sb{color:var(--chroma-base0B)}.chroma .sc{color:var(--chroma-base0B)}.chroma .dl{color:var(--chroma-base0F)}.chroma .sd{color:var(--chroma-base03)}.chroma .s2{color:var(--chroma-base0B)}.chroma .se{color:var(--chroma-base0C)}.chroma .sh{color:var(--chroma-base0B)}.chroma .si{color:var(--chroma-base0F)}.chroma .sx{color:var(--chroma-base0B)}.chroma .sr{color:var(--chroma-base0C)}.chroma .s1{color:var(--chroma-base0B)}.chroma .ss{color:var(--chroma-base0B)}.chroma .m{color:var(--chroma-base09)}.chroma .mb{color:var(--chroma-base09)}.chroma .mf{color:var(--chroma-base09)}.chroma .mh{color:var(--chroma-base09)}.chroma .mi{color:var(--chroma-base09)}.chroma .il{color:var(--chroma-base09)}.chroma .mo{color:var(--chroma-base09)}.chroma .o{color:var(--chroma-base05)}.chroma .ow{color:var(--chroma-base05)}.chroma .p{color:var(--chroma-base05)}.chroma .c{color:var(--chroma-base03)}.chroma .ch{color:var(--chroma-base03)}.chroma .cm{color:var(--chroma-base03)}.chroma .c1{color:var(--chroma-base03)}.chroma .cs{color:var(--chroma-base03)}.chroma .cp{color:var(--chroma-base0F)}.chroma .cpf{color:var(--chroma-base0B)}.chroma .g{color:var(--chroma-base05)}.chroma .gd{color:var(--chroma-base08)}.chroma .ge{color:var(--chroma-base05);font-style:italic}.chroma .gr{color:var(--chroma-base05)}.chroma .gh{color:var(--chroma-base0D)}.chroma .gi{color:var(--chroma-base0B)}.chroma .go{color:var(--chroma-base05)}.chroma .gp{color:var(--chroma-base05)}.chroma .gs{color:var(--chroma-base05);font-weight:700}.chroma .gu{color:var(--chroma-base0D)}.chroma .gt{color:var(--chroma-base05)}.chroma .gl{color:var(--chroma-base05);text-decoration:underline}.chroma .w{color:var(--chroma-base00)}#article-body blockquote.info{border:none;background:var(--callout-info-backgound);color:var(--callout-info-color)}#article-body blockquote.info>p{display:flex;gap:calc(var(--padding)/2)}#article-body blockquote.info>p>strong:first-child{font-size:2.5em}#article-body blockquote.info code{background:rgba(0,0,0,.1)}#article-body blockquote.info a{color:var(--callout-info-anchor);text-shadow:0 0 1px var(--callout-info-color)}#article-body blockquote.info a code{background:rgba(255,255,255,.2)} \ No newline at end of file +*:where(:not(html,iframe,canvas,img,svg,video,audio,pre,code):not(svg *,symbol *)){all:unset;display:revert}*,*::before,*::after{box-sizing:border-box}html{-moz-text-size-adjust:none;-webkit-text-size-adjust:none;text-size-adjust:none}a,button{cursor:revert}ol,ul,menu,summary{list-style:none}img{max-inline-size:100%;max-block-size:100%}table{border-collapse:collapse}input,textarea{-webkit-user-select:auto}textarea{white-space:revert}meter{-webkit-appearance:revert;appearance:revert}:where(pre){all:revert;box-sizing:border-box}::placeholder{color:unset}::marker{content:initial}:where([hidden]){display:none}:where([contenteditable]:not([contenteditable=false])){-moz-user-modify:read-write;-webkit-user-modify:read-write;overflow-wrap:break-word;-webkit-line-break:after-white-space;-webkit-user-select:auto}:where([draggable=true]){-webkit-user-drag:element}:where(dialog:modal){all:revert;box-sizing:border-box}pre,code{margin:0}::-webkit-details-marker{display:none}:root{--font-sans:ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-serif:ui-serif, Georgia, Cambria, "Times New Roman", Times, serif;--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--font-brand:"Arial", serif;--color:rgba(0, 0, 0, 1);--color-fade:rgba(0, 0, 0, .54);--color-nav:rgba(0, 0, 0, .7);--background:#ffffff;--background-grey:#f9f9f9;--background-grey-embed:#f0f0f0;--foreground:rgba(247, 247, 247, .25);--foreground-hover:rgba(220, 220, 220, .35);--foreground-highlight:#f5d41f;--color-highlight:#130606;--model-background:#ffffff;--model-foreground:rgba(247, 247, 247, .25);--model-box-shadow:0 8px 32px 0 rgba(31, 38, 135, .37);--padding:12px;--model-blur:10px;--border:#efefef;--border-nav:#dddddd;--radius:4px;--anchor:#235ce8;--hover:#547ce3;--chroma-base00:#f9f9f9;--chroma-base01:#e0e0e0;--chroma-base02:rgba(159, 218, 159, .2);--chroma-base03:#8e908c;--chroma-base04:#969896;--chroma-base05:#4d4d4c;--chroma-base06:#282a2e;--chroma-base07:#1d1f21;--chroma-base08:#c82829;--chroma-base09:#f5871f;--chroma-base0A:#eab700;--chroma-base0B:#718c00;--chroma-base0C:#3e999f;--chroma-base0D:#4271ae;--chroma-base0E:#8959a8;--chroma-base0F:#a3685a;--callout-info-backgound:#954ce3;--callout-info-foreground:rgba(0, 0, 0, .08);--callout-info-color:#ffffff;--callout-info-anchor:#d2aefc;--callout-info-anchor-text-shadow:.4px 0 .8px black}:root[data-color=dark]{--color:rgba(255, 255, 255, 1);--color-fade:rgba(255, 255, 255, .5);--color-nav:rgba(255, 255, 255, .8);--background:#101010;--background-grey:#1e1e1e;--background-grey-embed:#2f2d2d;--foreground:rgba(19, 19, 19, 1);--foreground-hover:rgba(35, 35, 35, 1);--model-background:rgba(16, 16, 16, 1);--model-foreground:rgba(225, 225, 225, .05);--model-box-shadow:0 8px 32px 0 rgba(241, 235, 235, 0.1);--border:rgba(225, 225, 225, .1);--border-nav:rgba(255, 255, 255, .2);--anchor:#2e87f1;--hover:#044b9d;--chroma-base00:var(--background-grey) /*#080808*/;--chroma-base01:#393939;--chroma-base02:rgba(159, 218, 159, .1);--chroma-base03:#999999;--chroma-base04:#b4b7b4;--chroma-base05:#cccccc;--chroma-base06:#e0e0e0;--chroma-base07:#ffffff;--chroma-base08:#f2777a;--chroma-base09:#f99157;--chroma-base0A:#ffcc66;--chroma-base0B:#99cc99;--chroma-base0C:#66cccc;--chroma-base0D:#6699cc;--chroma-base0E:#cc99cc;--chroma-base0F:#a3685a}.site-logo{text-transform:uppercase;font-family:var(--font-brand);font-size:1.5em;color:transparent;-webkit-text-stroke:.5px var(--border);background:0 0;letter-spacing:3px;background:linear-gradient(45deg,#866ee7,#ea60da,#ed8f57,#fbd41d,#2cca91);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;font-weight:800}.btn{display:flex;padding:calc(var(--padding)/2);background:var(--foreground);border:1px solid var(--border);border-radius:var(--radius);gap:calc(var(--padding)/2);cursor:pointer;color:var(--color-nav)}.btn:hover{background:var(--foreground-hover)}html{scroll-behavior:smooth;scroll-padding:2em}body{display:flex;flex-direction:column;height:100%;color:var(--color);background:var(--background);font-family:var(--font-sans)}#outer-wrapper{display:flex}#aside-wrapper{width:85%;left:-85%;display:none;overflow-x:auto}#aside-wrapper>aside>div{display:flex;padding:var(--padding);justify-content:flex-end}#aside-wrapper>aside>a{display:none}#content-wrapper{display:flex;flex:1;flex-direction:column;min-height:100svh}main{display:flex;flex-direction:column;flex:1;width:100svw}#aside-wrapper.open{display:flex;flex-direction:column;position:fixed;top:0;height:100%;z-index:10;transition:.3s;animation:slide-in-left .3s forwards;background:var(--model-background);box-shadow:var(--model-box-shadow)}@keyframes slide-in-left{from{transform:translateX(0)}to{transform:translateX(100%)}}#content-wrapper>header{border-bottom:1px solid var(--border)}#content-wrapper>header>a{display:inline-block;padding:var(--padding)}#content-wrapper>footer{display:flex;flex-direction:column;padding:var(--padding)}#content-wrapper>footer>div{display:flex;align-items:center;justify-content:center;padding:var(--padding);gap:calc(var(--padding)/2);text-align:center;flex-wrap:wrap}#content-wrapper>footer>div:first-child{white-space:initial}#content-wrapper>footer>div:first-child a{background:var(--foreground-highlight);color:var(--color-highlight);border-radius:var(--radius);cursor:pointer;padding:0 calc(var(--padding)/2)}#content-wrapper>footer>div:nth-child(2){justify-content:flex-end}main>article{display:flex;flex:1;flex-direction:column}main>article>nav{display:flex;padding:calc(var(--padding) * 2)var(--padding)var(--padding);gap:12px;justify-content:space-between}main>article>header{padding:var(--padding)calc(var(--padding) * 2)}#article-body{display:flex;flex-direction:column;flex:1;padding:var(--padding)calc(var(--padding) * 2);overflow-x:auto}main>article>footer{display:grid;grid-template-columns:repeat(2,1fr);padding:0 calc(var(--padding) * 2)}main>article>footer>time{grid-column:1/3;display:flex;color:var(--color-fade);justify-content:center;padding:var(--padding)0;gap:calc(var(--padding)/2)}main>article>footer>a{display:flex;padding:var(--padding);gap:calc(var(--padding)/4);background:var(--foreground);color:var(--color-nav);border:1px solid var(--border);border-radius:var(--radius);cursor:pointer;width:50%}main>article>footer>a:hover{background:var(--foreground-hover)}main>article>footer>a.hidden{visibility:hidden}main>article>footer>a:last-child{display:flex;justify-content:end;margin-left:50%}main>aside{width:85%;right:-85%;display:none;overflow-x:auto}main>aside.open{display:flex;flex-direction:column;position:fixed;top:0;height:100%;z-index:10;transition:.3s;animation:slide-in-right .3s forwards;background:var(--model-background);box-shadow:var(--model-box-shadow)}#aside-wrapper{position:sticky;top:0}#aside-wrapper>aside>nav{padding:0 var(--padding)}#aside-wrapper>aside>nav>details{padding-bottom:0}#aside-wrapper>aside>nav>details[open]{padding-bottom:calc(var(--padding) * 1.5)}#aside-wrapper>aside>nav>details>summary{display:flex;padding:var(--padding)0;color:var(--color);font-weight:700}#aside-wrapper>aside>nav>details[open]>summary{color:var(--color-fade)}#aside-wrapper>aside>nav>details>ul>li{margin:0 calc(var(--padding)/2);border-left:1px solid var(--border-nav)}#aside-wrapper>aside>nav>details>ul>li>a{color:var(--color-nav);display:flex;cursor:pointer;padding:calc(var(--padding)/2)}#aside-wrapper>aside>nav>details>ul>li>a::before{content:'';display:inline-block;background:var(--background);width:calc(var(--padding)/2);height:calc(var(--padding)/2);transform:rotate(45deg);border:1px solid var(--border-nav);position:relative;left:calc((var(--padding) * -.78));top:3px}#aside-wrapper>aside>nav>details>ul>li>a.active{background:var(--foreground-highlight);color:var(--color-highlight);border-top-right-radius:var(--radius);border-bottom-right-radius:var(--radius)}#aside-wrapper>aside>nav>details>ul>li>a.active::before{background:var(--foreground-highlight);border:var(--foreground-highlight);left:calc((var(--padding) * -.76))}#aside-wrapper>aside>nav>details>ul>li>a:hover:not(.active){background:var(--foreground-hover);border-top-right-radius:var(--radius);border-bottom-right-radius:var(--radius)}main>aside>div{display:flex;padding:var(--padding)}main>aside>strong{display:flex;padding:var(--padding);color:var(--color-fade);font-weight:700}main>aside>nav{padding:0 var(--padding)}#TableOfContents ul{border-left:1px solid var(--border)}#TableOfContents a{color:var(--color-nav);display:inline-block;cursor:pointer;padding:calc(var(--padding)/2)}#TableOfContents a code{padding:calc(var(--padding)/3.7);border-radius:var(--radius);font-size:.9em}#TableOfContents ul a::before{content:'';display:inline-block;width:calc(var(--padding)/1.5);height:calc(var(--padding)/1.5);background:var(--background);border:1px solid var(--border-nav);position:relative;left:calc((var(--padding) * -.89));top:-3px;border-radius:30%;transform:rotate(45deg)}#TableOfContents a.active{background:var(--foreground-highlight);color:var(--color-highlight);border-top-right-radius:var(--radius);border-bottom-right-radius:var(--radius)}#TableOfContents ul a.active::before{background:var(--background)}#TableOfContents a:hover:not(.active){background:var(--foreground-hover);border-top-right-radius:var(--radius);border-bottom-right-radius:var(--radius)}#TableOfContents ul ul{margin-left:calc(var(--padding) * 1.75)}@keyframes slide-in-right{from{transform:translateX(0)}to{transform:translateX(-100%)}}body.model-open{overflow:hidden}#body-model-outer{display:none;content:"";position:fixed;top:0;left:0;width:100%;height:100%;z-index:5;background:var(--model-foreground);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}#aside-wrapper>aside>div .btn,main>aside>div>.btn{font-size:.75em;font-weight:800}@media(min-width:768px) and (max-width:1023px){#aside-wrapper{width:50%;left:-50%}main>aside{width:50%;right:-50%}}@media(min-width:1024px){:root{--padding:16px}main{flex-direction:row}main>article{width:75vw;overflow-x:auto}main>aside{width:25%;display:flex;flex-direction:column;position:sticky;top:0;height:calc(100svh - 68px);overflow-x:auto}main>aside>div{display:none}main>article>nav>button:last-child{display:none}#content-wrapper>footer{padding:0 var(--padding);flex-direction:row}#content-wrapper>footer>div:first-child{width:75vw}#content-wrapper>footer>div:nth-child(2){width:25%}}@media(min-width:1024px) and (max-width:1279px){#aside-wrapper{width:33%;left:-33%}}@media(min-width:1280px){#aside-wrapper{width:20%;display:flex;flex-direction:column;height:100svh;background:var(--foreground);border-right:1px solid var(--border);overflow-x:auto}#aside-wrapper>aside>div{display:none}#aside-wrapper>aside>nav{overflow-x:auto}#content-wrapper>header{display:none}#aside-wrapper>aside>a{display:flex;padding:calc(var(--padding) * 2)var(--padding)}main{width:80svw;padding:0 calc(var(--padding) * 2)}main>article{width:60vw;overflow-x:auto}main>article>nav{display:none}main>aside{width:25%}main>article>header{padding:calc(var(--padding) * 2)calc(var(--padding) * 2)var(--padding)}#content-wrapper>footer>div:first-child{width:60vw}#content-wrapper>footer>div:nth-child(2){width:25%}}main>article>header>h1{font-size:3em}main>article>header>p{font-size:1.25em;color:var(--color-fade);padding-top:var(--padding)}#article-body h1,#article-body h2,#article-body h3,#article-body h4,#article-body h5,#article-body h6{line-height:1em;font-weight:400;margin:2.6em 0 .1em;color:var(--color)}#article-body h1{font-size:1.8em}#article-body h2{font-size:1.5em}#article-body h3{font-size:1.3em}#article-body h4{font-size:1.1em}#article-body .highlight,#article-body blockquote,#article-body dl,#article-body iframe,#article-body ol,#article-body p,#article-body table,#article-body ul{margin-top:1em;line-height:1.8rem;letter-spacing:-.1px}#article-body blockquote p{margin:1em 0}#article-body blockquote dl,#article-body blockquote ol,#article-body blockquote ul{margin:0 1em 1em}#article-body a{color:var(--anchor);text-decoration:none}#article-body a:hover{color:var(--hover);text-decoration:underline}#article-body strong,#article-body b,#article-body table th{font-weight:600}#article-body em{font-style:italic}#article-body dl,#article-body ol,#article-body ul{margin-left:20px}#article-body dl dl,#article-body dl ol,#article-body dl ul,#article-body ol dl,#article-body ol ol,#article-body ol ul,#article-body ul dl,#article-body ul ol,#article-body ul ul{margin-top:0;margin-bottom:0}#article-body ul{list-style:disc}#article-body ol{list-style:decimal}#article-body dl{list-style:square}#article-body li>ul{list-style:circle}#article-body li>ol{list-style:lower-alpha}#article-body li p{margin:0}#article-body li .highlight,#article-body li blockquote,#article-body li iframe,#article-body li table{margin:1em 0}#article-body img,#article-body video{max-width:100%;border-radius:4px}#article-body blockquote{padding:8px 12px;position:relative;background:var(--background-grey);border-left-width:5px;border-radius:6px}#article-body blockquote footer{margin:1em 0;font-style:italic}#article-body blockquote footer cite:before{content:"β€”";padding:0 .3em}#article-body blockquote footer cite a{color:var(--border)}#article-body code,#article-body pre{font-family:var(--font-mono)}#article-body h1 code,#article-body h2 code,#article-body h3 code,#article-body h4 code,#article-body h5 code,#article-body h6 code,#article-body p code,#article-body blockquote code,#article-body ul code,#article-body ol code,#article-body dl code,#article-body table code{background:var(--background-grey);padding:calc(var(--padding)/3.7);border-radius:var(--radius);font-size:.9em}#article-body blockquote code{background:var(--background-grey-embed)}#article-body pre:not(.chroma){color:var(--chroma-base05);font-size:.9em;line-height:1.8;letter-spacing:-.1px;background-color:var(--chroma-base00);border-radius:6px;padding:16px 24px;overflow-x:auto;margin-top:1em}#article-body blockquote .chroma,#article-body blockquote pre:not(.chroma){background:var(--foreground-hover);margin-bottom:1em}#article-body blockquote .chroma code,#article-body blockquote pre:not(.chroma) code{padding:0}#article-body table{max-width:100%;border-radius:calc(var(--radius)*2);box-shadow:0 0 0 1px var(--border)}#article-body table td,#article-body table th{padding:5px 15px}#article-body table tr:nth-child(2n){background:var(--background-grey)}#article-body table thead tr{background:var(--background-grey-embed)}.chroma{font-size:.9em;color:var(--chroma-base05);background-color:var(--chroma-base00);border-radius:6px;padding:16px 24px;overflow-x:auto}.chroma .x{color:var(--chroma-base05)}.chroma .err{color:var(--chroma-base08)}.chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.chroma .lntable{border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block}.chroma .hl{display:block;width:100%;background-color:var(--chroma-base02)}.chroma .lnt{margin-right:.4em;padding:0 .4em}.chroma .ln{margin-right:.4em;padding:0 .4em;border-right:1px solid var(--chroma-base0A)}.chroma .line{display:flex}.chroma .k{color:var(--chroma-base0E)}.chroma .kc{color:var(--chroma-base0E)}.chroma .kd{color:var(--chroma-base0E)}.chroma .kn{color:var(--chroma-base0E)}.chroma .kp{color:var(--chroma-base0D)}.chroma .kr{color:var(--chroma-base0E)}.chroma .kt{color:var(--chroma-base0E)}.chroma .n{color:var(--chroma-base05)}.chroma .na{color:var(--chroma-base05)}.chroma .nb{color:var(--chroma-base0D)}.chroma .bp{color:var(--chroma-base0D)}.chroma .nc{color:var(--chroma-base0A)}.chroma .no{color:var(--chroma-base09)}.chroma .nd{color:var(--chroma-base09)}.chroma .ni{color:var(--chroma-base0A)}.chroma .ne{color:var(--chroma-base0A)}.chroma .nf{color:var(--chroma-base05)}.chroma .fm{color:var(--chroma-base05)}.chroma .nl{color:var(--chroma-base08)}.chroma .nn{color:var(--chroma-base0A)}.chroma .nx{color:var(--chroma-base0D)}.chroma .py{color:var(--chroma-base08)}.chroma .nt{color:var(--chroma-base0D)}.chroma .nv{color:var(--chroma-base0D)}.chroma .vc{color:var(--chroma-base0D)}.chroma .vg{color:var(--chroma-base0D)}.chroma .vi{color:var(--chroma-base08)}.chroma .vm{color:var(--chroma-base0D)}.chroma .l{color:var(--chroma-base0B)}.chroma .ld{color:var(--chroma-base0B)}.chroma .s{color:var(--chroma-base0B)}.chroma .sa{color:var(--chroma-base0B)}.chroma .sb{color:var(--chroma-base0B)}.chroma .sc{color:var(--chroma-base0B)}.chroma .dl{color:var(--chroma-base0F)}.chroma .sd{color:var(--chroma-base03)}.chroma .s2{color:var(--chroma-base0B)}.chroma .se{color:var(--chroma-base0C)}.chroma .sh{color:var(--chroma-base0B)}.chroma .si{color:var(--chroma-base0F)}.chroma .sx{color:var(--chroma-base0B)}.chroma .sr{color:var(--chroma-base0C)}.chroma .s1{color:var(--chroma-base0B)}.chroma .ss{color:var(--chroma-base0B)}.chroma .m{color:var(--chroma-base09)}.chroma .mb{color:var(--chroma-base09)}.chroma .mf{color:var(--chroma-base09)}.chroma .mh{color:var(--chroma-base09)}.chroma .mi{color:var(--chroma-base09)}.chroma .il{color:var(--chroma-base09)}.chroma .mo{color:var(--chroma-base09)}.chroma .o{color:var(--chroma-base05)}.chroma .ow{color:var(--chroma-base05)}.chroma .p{color:var(--chroma-base05)}.chroma .c{color:var(--chroma-base03)}.chroma .ch{color:var(--chroma-base03)}.chroma .cm{color:var(--chroma-base03)}.chroma .c1{color:var(--chroma-base03)}.chroma .cs{color:var(--chroma-base03)}.chroma .cp{color:var(--chroma-base0F)}.chroma .cpf{color:var(--chroma-base0B)}.chroma .g{color:var(--chroma-base05)}.chroma .gd{color:var(--chroma-base08)}.chroma .ge{color:var(--chroma-base05);font-style:italic}.chroma .gr{color:var(--chroma-base05)}.chroma .gh{color:var(--chroma-base0D)}.chroma .gi{color:var(--chroma-base0B)}.chroma .go{color:var(--chroma-base05)}.chroma .gp{color:var(--chroma-base05)}.chroma .gs{color:var(--chroma-base05);font-weight:700}.chroma .gu{color:var(--chroma-base0D)}.chroma .gt{color:var(--chroma-base05)}.chroma .gl{color:var(--chroma-base05);text-decoration:underline}.chroma .w{color:var(--chroma-base00)}#article-body blockquote.info{border:none;background:var(--callout-info-backgound);color:var(--callout-info-color)}#article-body blockquote.info>p{display:flex;gap:calc(var(--padding)/2)}#article-body blockquote.info>p>strong:first-child{font-size:2.5em}#article-body blockquote.info li{margin:0 calc(var(--padding)/2)}#article-body blockquote.info code{background:var(--callout-info-foreground)}#article-body blockquote.info a{color:var(--callout-info-anchor);text-shadow:var(--callout-info-anchor-text-shadow)} \ No newline at end of file From 35cc0d9850816e81c486768b5458e79f012dc438 Mon Sep 17 00:00:00 2001 From: Dumindu Madunuwan Date: Wed, 6 Dec 2023 22:16:21 +0800 Subject: [PATCH 03/24] Sync stylesheets --- ...5137be47315c6aa021236da2de84cec9a20c5cf6973f9887f4ff79d1.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/assets/css/home.min.min.c5c3b8755137be47315c6aa021236da2de84cec9a20c5cf6973f9887f4ff79d1.css b/docs/assets/css/home.min.min.c5c3b8755137be47315c6aa021236da2de84cec9a20c5cf6973f9887f4ff79d1.css index c9fec8a..e1dd79b 100644 --- a/docs/assets/css/home.min.min.c5c3b8755137be47315c6aa021236da2de84cec9a20c5cf6973f9887f4ff79d1.css +++ b/docs/assets/css/home.min.min.c5c3b8755137be47315c6aa021236da2de84cec9a20c5cf6973f9887f4ff79d1.css @@ -1 +1 @@ -*:where(:not(html,iframe,canvas,img,svg,video,audio,pre,code):not(svg *,symbol *)){all:unset;display:revert}*,*::before,*::after{box-sizing:border-box}html{-moz-text-size-adjust:none;-webkit-text-size-adjust:none;text-size-adjust:none}a,button{cursor:revert}ol,ul,menu,summary{list-style:none}img{max-inline-size:100%;max-block-size:100%}table{border-collapse:collapse}input,textarea{-webkit-user-select:auto}textarea{white-space:revert}meter{-webkit-appearance:revert;appearance:revert}:where(pre){all:revert;box-sizing:border-box}::placeholder{color:unset}::marker{content:initial}:where([hidden]){display:none}:where([contenteditable]:not([contenteditable=false])){-moz-user-modify:read-write;-webkit-user-modify:read-write;overflow-wrap:break-word;-webkit-line-break:after-white-space;-webkit-user-select:auto}:where([draggable=true]){-webkit-user-drag:element}:where(dialog:modal){all:revert;box-sizing:border-box}pre,code{margin:0}::-webkit-details-marker{display:none}:root{--font-sans:ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-serif:ui-serif, Georgia, Cambria, "Times New Roman", Times, serif;--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--font-brand:"Arial", serif;--color:rgba(0, 0, 0, 1);--color-fade:rgba(0, 0, 0, .54);--color-nav:rgba(0, 0, 0, .7);--background:#ffffff;--background-grey:#f9f9f9;--background-grey-embed:#f0f0f0;--foreground:rgba(247, 247, 247, .25);--foreground-hover:rgba(220, 220, 220, .35);--foreground-highlight:#f5d41f;--color-highlight:#130606;--model-background:#ffffff;--model-foreground:rgba(247, 247, 247, .25);--model-box-shadow:0 8px 32px 0 rgba(31, 38, 135, .37);--padding:12px;--model-blur:10px;--border:#efefef;--border-nav:#dddddd;--radius:4px;--anchor:#235ce8;--hover:#547ce3;--chroma-base00:#f9f9f9;--chroma-base01:#e0e0e0;--chroma-base02:rgba(159, 218, 159, .2);--chroma-base03:#8e908c;--chroma-base04:#969896;--chroma-base05:#4d4d4c;--chroma-base06:#282a2e;--chroma-base07:#1d1f21;--chroma-base08:#c82829;--chroma-base09:#f5871f;--chroma-base0A:#eab700;--chroma-base0B:#718c00;--chroma-base0C:#3e999f;--chroma-base0D:#4271ae;--chroma-base0E:#8959a8;--chroma-base0F:#a3685a;--callout-info-backgound:#954ce3;--callout-info-color:#ffffff;--callout-info-anchor:#261627}:root[data-color=dark]{--color:rgba(255, 255, 255, 1);--color-fade:rgba(255, 255, 255, .5);--color-nav:rgba(255, 255, 255, .8);--background:#101010;--background-grey:#1e1e1e;--background-grey-embed:#2f2d2d;--foreground:rgba(19, 19, 19, 1);--foreground-hover:rgba(35, 35, 35, 1);--model-background:rgba(16, 16, 16, 1);--model-foreground:rgba(225, 225, 225, .05);--model-box-shadow:0 8px 32px 0 rgba(241, 235, 235, 0.1);--border:rgba(225, 225, 225, .1);--border-nav:rgba(255, 255, 255, .2);--anchor:#2e87f1;--hover:#044b9d;--chroma-base00:var(--background-grey)/*#080808*/;--chroma-base01:#393939;--chroma-base02:rgba(159, 218, 159, .1);--chroma-base03:#999999;--chroma-base04:#b4b7b4;--chroma-base05:#cccccc;--chroma-base06:#e0e0e0;--chroma-base07:#ffffff;--chroma-base08:#f2777a;--chroma-base09:#f99157;--chroma-base0A:#ffcc66;--chroma-base0B:#99cc99;--chroma-base0C:#66cccc;--chroma-base0D:#6699cc;--chroma-base0E:#cc99cc;--chroma-base0F:#a3685a}.site-logo{text-transform:uppercase;font-family:var(--font-brand);font-size:1.5em;color:transparent;-webkit-text-stroke:.5px var(--border);background:0 0;letter-spacing:3px;background:linear-gradient(45deg,#866ee7,#ea60da,#ed8f57,#fbd41d,#2cca91);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;font-weight:800}@media(min-width:2560px){body{zoom:1.2}}@media(min-width:3840px){body{zoom:1.6}}.btn{display:flex;padding:calc(var(--padding)/2);background:var(--foreground);border:1px solid var(--border);border-radius:var(--radius);gap:calc(var(--padding)/2);cursor:pointer;color:var(--color-nav)}.btn:hover{background:var(--foreground-hover)}html{scroll-behavior:smooth;scroll-padding:2em}body{display:flex;flex-direction:column;height:100%;color:var(--color);background:var(--background);font-family:var(--font-sans)}#content-wrapper{display:flex;flex:1;flex-direction:column;min-height:100svh}#content-wrapper>header{border-bottom:1px solid var(--border)}#content-wrapper>header>a{display:inline-block;padding:var(--padding)}#content-wrapper>footer{display:flex;flex-direction:column;padding:var(--padding)}#content-wrapper>footer>div{display:flex;align-items:center;justify-content:center;padding:var(--padding);gap:calc(var(--padding)/2);text-align:center;flex-wrap:wrap}#content-wrapper>footer>div:first-child{white-space:initial}#content-wrapper>footer>div:first-child a{background:var(--foreground-highlight);color:var(--color-highlight);border-radius:var(--radius);cursor:pointer;padding:0 calc(var(--padding)/2)}#content-wrapper>footer>div:nth-child(2){justify-content:flex-end}main{display:flex;flex:1;flex-direction:column;align-items:center;justify-content:center}main>section{display:flex}main>section>div{display:flex;flex-direction:column}main>section>div>header{display:flex;flex-direction:column;text-align:center;padding:calc(var(--padding)*2)var(--padding);cursor:url("data:image/svg+xml;utf8, πŸ¦„"),auto}main>section>div>header>h1{display:flex;font-size:2.5em;font-weight:800;padding-bottom:calc(var(--padding)*1.2);gap:var(--padding);flex-wrap:wrap;justify-content:center}main>section>div>header>h1>span{color:#866ee7}main>section>div>header>p{color:var(--color-fade);font-size:1.2em}main>section>div>div{display:flex;justify-content:center;gap:calc(var(--padding)*2)}main>section>div>div>.btn{font-size:1.1em;padding:.4em 1em}main>section>div>div>.btn:first-child,main>section>div>div>.btn:first-child:hover{background:var(--foreground-highlight);color:var(--color-highlight)}main>section>div>div>.btn:last-child,main>section>div>div>.btn:last-child:hover{background:var(--foreground-hover)}@media(min-width:1024px){main>section>div>header{padding:calc(var(--padding)*2)calc(var(--padding)*2)calc(var(--padding)*3)}main>section>div>header>h1{font-size:3em}main>section>div>header>p{font-size:1.4em}main>section>div>div{gap:calc(var(--padding)*2.5)}main>section>div>div>.btn{font-size:1.27em}}@media(min-width:1280px){main>section>div>header{padding:calc(var(--padding)*2)calc(var(--padding)*3)calc(var(--padding)*6)}main>section>div>header>h1{font-size:4em}main>section>div>header>p{font-size:1.6em}main>section>div>div{gap:calc(var(--padding)*2.6)}main>section>div>div>.btn{font-size:1.5em}} \ No newline at end of file +*:where(:not(html,iframe,canvas,img,svg,video,audio,pre,code):not(svg *,symbol *)){all:unset;display:revert}*,*::before,*::after{box-sizing:border-box}html{-moz-text-size-adjust:none;-webkit-text-size-adjust:none;text-size-adjust:none}a,button{cursor:revert}ol,ul,menu,summary{list-style:none}img{max-inline-size:100%;max-block-size:100%}table{border-collapse:collapse}input,textarea{-webkit-user-select:auto}textarea{white-space:revert}meter{-webkit-appearance:revert;appearance:revert}:where(pre){all:revert;box-sizing:border-box}::placeholder{color:unset}::marker{content:initial}:where([hidden]){display:none}:where([contenteditable]:not([contenteditable=false])){-moz-user-modify:read-write;-webkit-user-modify:read-write;overflow-wrap:break-word;-webkit-line-break:after-white-space;-webkit-user-select:auto}:where([draggable=true]){-webkit-user-drag:element}:where(dialog:modal){all:revert;box-sizing:border-box}pre,code{margin:0}::-webkit-details-marker{display:none}:root{--font-sans:ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-serif:ui-serif, Georgia, Cambria, "Times New Roman", Times, serif;--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--font-brand:"Arial", serif;--color:rgba(0, 0, 0, 1);--color-fade:rgba(0, 0, 0, .54);--color-nav:rgba(0, 0, 0, .7);--background:#ffffff;--background-grey:#f9f9f9;--background-grey-embed:#f0f0f0;--foreground:rgba(247, 247, 247, .25);--foreground-hover:rgba(220, 220, 220, .35);--foreground-highlight:#f5d41f;--color-highlight:#130606;--model-background:#ffffff;--model-foreground:rgba(247, 247, 247, .25);--model-box-shadow:0 8px 32px 0 rgba(31, 38, 135, .37);--padding:12px;--model-blur:10px;--border:#efefef;--border-nav:#dddddd;--radius:4px;--anchor:#235ce8;--hover:#547ce3;--chroma-base00:#f9f9f9;--chroma-base01:#e0e0e0;--chroma-base02:rgba(159, 218, 159, .2);--chroma-base03:#8e908c;--chroma-base04:#969896;--chroma-base05:#4d4d4c;--chroma-base06:#282a2e;--chroma-base07:#1d1f21;--chroma-base08:#c82829;--chroma-base09:#f5871f;--chroma-base0A:#eab700;--chroma-base0B:#718c00;--chroma-base0C:#3e999f;--chroma-base0D:#4271ae;--chroma-base0E:#8959a8;--chroma-base0F:#a3685a;--callout-info-backgound:#954ce3;--callout-info-color:#ffffff;--callout-info-anchor:#261627}:root[data-color=dark]{--color:rgba(255, 255, 255, 1);--color-fade:rgba(255, 255, 255, .5);--color-nav:rgba(255, 255, 255, .8);--background:#101010;--background-grey:#1e1e1e;--background-grey-embed:#2f2d2d;--foreground:rgba(19, 19, 19, 1);--foreground-hover:rgba(35, 35, 35, 1);--model-background:rgba(16, 16, 16, 1);--model-foreground:rgba(225, 225, 225, .05);--model-box-shadow:0 8px 32px 0 rgba(241, 235, 235, 0.1);--border:rgba(225, 225, 225, .1);--border-nav:rgba(255, 255, 255, .2);--anchor:#2e87f1;--hover:#044b9d;--chroma-base00:var(--background-grey)/*#080808*/;--chroma-base01:#393939;--chroma-base02:rgba(159, 218, 159, .1);--chroma-base03:#999999;--chroma-base04:#b4b7b4;--chroma-base05:#cccccc;--chroma-base06:#e0e0e0;--chroma-base07:#ffffff;--chroma-base08:#f2777a;--chroma-base09:#f99157;--chroma-base0A:#ffcc66;--chroma-base0B:#99cc99;--chroma-base0C:#66cccc;--chroma-base0D:#6699cc;--chroma-base0E:#cc99cc;--chroma-base0F:#a3685a}.site-logo{text-transform:uppercase;font-family:var(--font-brand);font-size:1.5em;color:transparent;-webkit-text-stroke:.5px var(--border);background:0 0;letter-spacing:3px;background:linear-gradient(45deg,#866ee7,#ea60da,#ed8f57,#fbd41d,#2cca91);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;font-weight:800}.btn{display:flex;padding:calc(var(--padding)/2);background:var(--foreground);border:1px solid var(--border);border-radius:var(--radius);gap:calc(var(--padding)/2);cursor:pointer;color:var(--color-nav)}.btn:hover{background:var(--foreground-hover)}html{scroll-behavior:smooth;scroll-padding:2em}body{display:flex;flex-direction:column;height:100%;color:var(--color);background:var(--background);font-family:var(--font-sans)}#content-wrapper{display:flex;flex:1;flex-direction:column;min-height:100svh}#content-wrapper>header{border-bottom:1px solid var(--border)}#content-wrapper>header>a{display:inline-block;padding:var(--padding)}#content-wrapper>footer{display:flex;flex-direction:column;padding:var(--padding)}#content-wrapper>footer>div{display:flex;align-items:center;justify-content:center;padding:var(--padding);gap:calc(var(--padding)/2);text-align:center;flex-wrap:wrap}#content-wrapper>footer>div:first-child{white-space:initial}#content-wrapper>footer>div:first-child a{background:var(--foreground-highlight);color:var(--color-highlight);border-radius:var(--radius);cursor:pointer;padding:0 calc(var(--padding)/2)}#content-wrapper>footer>div:nth-child(2){justify-content:flex-end}main{display:flex;flex:1;flex-direction:column;align-items:center;justify-content:center}main>section{display:flex}main>section>div{display:flex;flex-direction:column}main>section>div>header{display:flex;flex-direction:column;text-align:center;padding:calc(var(--padding)*2)var(--padding);cursor:url("data:image/svg+xml;utf8, πŸ¦„"),auto}main>section>div>header>h1{display:flex;font-size:2.5em;font-weight:800;padding-bottom:calc(var(--padding)*1.2);gap:var(--padding);flex-wrap:wrap;justify-content:center}main>section>div>header>h1>span{color:#866ee7}main>section>div>header>p{color:var(--color-fade);font-size:1.2em}main>section>div>div{display:flex;justify-content:center;gap:calc(var(--padding)*2)}main>section>div>div>.btn{font-size:1.1em;padding:.4em 1em}main>section>div>div>.btn:first-child,main>section>div>div>.btn:first-child:hover{background:var(--foreground-highlight);color:var(--color-highlight)}main>section>div>div>.btn:last-child,main>section>div>div>.btn:last-child:hover{background:var(--foreground-hover)}@media(min-width:1024px){main>section>div>header{padding:calc(var(--padding)*2)calc(var(--padding)*2)calc(var(--padding)*3)}main>section>div>header>h1{font-size:3em}main>section>div>header>p{font-size:1.4em}main>section>div>div{gap:calc(var(--padding)*2.5)}main>section>div>div>.btn{font-size:1.27em}}@media(min-width:1280px){main>section>div>header{padding:calc(var(--padding)*2)calc(var(--padding)*3)calc(var(--padding)*6)}main>section>div>header>h1{font-size:4em}main>section>div>header>p{font-size:1.6em}main>section>div>div{gap:calc(var(--padding)*2.6)}main>section>div>div>.btn{font-size:1.5em}} \ No newline at end of file From 75ceff13677cd139a05201fcf12426887f65e1c8 Mon Sep 17 00:00:00 2001 From: Dumindu Madunuwan Date: Mon, 1 Jan 2024 21:47:27 +0800 Subject: [PATCH 04/24] Update site --- docs/docs/borrowing/index.html | 6 ++-- .../index.html | 8 ++--- docs/docs/code-organization/index.html | 6 ++-- docs/docs/combinators/index.html | 8 ++--- .../index.html | 8 ++--- docs/docs/control-flows/index.html | 6 ++-- docs/docs/crates/index.html | 6 ++-- docs/docs/custom-error-types/index.html | 8 ++--- docs/docs/enums/index.html | 6 ++-- .../error-and-none-propagation/index.html | 8 ++--- docs/docs/functions-02/index.html | 6 ++-- docs/docs/functions/index.html | 8 ++--- docs/docs/generics/index.html | 6 ++-- docs/docs/hello-world/index.html | 6 ++-- docs/docs/impls-and-traits/index.html | 6 ++-- docs/docs/installation/index.html | 6 ++-- docs/docs/lifetimes/index.html | 6 ++-- docs/docs/modules/index.html | 6 ++-- docs/docs/operators/index.html | 8 ++--- docs/docs/option-and-result/index.html | 8 ++--- docs/docs/overview/index.html | 6 ++-- docs/docs/ownership/index.html | 6 ++-- docs/docs/panicking/index.html | 8 ++--- docs/docs/primitive-data-types/index.html | 8 ++--- docs/docs/smart-compiler/index.html | 8 ++--- .../std-primitives-and-preludes/index.html | 6 ++-- docs/docs/structs/index.html | 8 ++--- docs/docs/unwrap-and-expect/index.html | 8 ++--- docs/docs/use/index.html | 6 ++-- .../index.html | 8 ++--- docs/docs/vectors/index.html | 6 ++-- docs/docs/why-rust/index.html | 8 ++--- docs/docs/workspaces/index.html | 6 ++-- docs/index.html | 6 ++-- docs/sitemap.xml | 34 +++++++++---------- 35 files changed, 134 insertions(+), 134 deletions(-) diff --git a/docs/docs/borrowing/index.html b/docs/docs/borrowing/index.html index bd25bf4..7d43251 100644 --- a/docs/docs/borrowing/index.html +++ b/docs/docs/borrowing/index.html @@ -12,7 +12,7 @@ Borrowing Β· Learning Rust - + @@ -701,7 +701,7 @@

Examples for Shared Borrowing