1. Introduction
  2. Hello World
    1. Comments
    2. Formatted print
      1. Debug
      2. Display
        1. Testcase: List
      3. Formatting
  3. Primitives
    1. Literals and operators
    2. Tuples
    3. Arrays and Slices
  4. Custom Types
    1. Structures
    2. Enums
      1. use
      2. C-like
      3. Testcase: linked-list
    3. constants
  5. Variable Bindings
    1. Mutability
    2. Scope and Shadowing
    3. Declare first
    4. Freezing
  6. Types
    1. Casting
    2. Literals
    3. Inference
    4. Aliasing
  7. Conversion
    1. From and Into
    2. TryFrom and TryInto
    3. To and from Strings
  8. Expressions
  9. Flow of Control
    1. if/else
    2. loop
      1. Nesting and labels
      2. Returning from loops
    3. while
    4. for and range
    5. match
      1. Destructuring
        1. tuples
        2. arrays/slices
        3. enums
        4. pointers/ref
        5. structs
      2. Guards
      3. Binding
    6. if let
    7. let-else
    8. while let
  10. Functions
    1. Methods
    2. Closures
      1. Capturing
      2. As input parameters
      3. Type anonymity
      4. Input functions
      5. As output parameters
      6. Examples in std
        1. Iterator::any
        2. Searching through iterators
    3. Higher Order Functions
    4. Diverging functions
  11. Modules
    1. Visibility
    2. Struct visibility
    3. The use declaration
    4. super and self
    5. File hierarchy
  12. Crates
    1. Creating a Library
    2. Using a Library
  13. Cargo
    1. Dependencies
    2. Conventions
    3. Tests
    4. Build Scripts
  14. Attributes
    1. dead_code
    2. Crates
    3. cfg
      1. Custom
  15. Generics
    1. Functions
    2. Implementation
    3. Traits
    4. Bounds
      1. Testcase: empty bounds
    5. Multiple bounds
    6. Where clauses
    7. New Type Idiom
    8. Associated items
      1. The Problem
      2. Associated types
    9. Phantom type parameters
      1. Testcase: unit clarification
  16. Scoping rules
    1. RAII
    2. Ownership and moves
      1. Mutability
      2. Partial moves
    3. Borrowing
      1. Mutability
      2. Aliasing
      3. The ref pattern
    4. Lifetimes
      1. Explicit annotation
      2. Functions
      3. Methods
      4. Structs
      5. Traits
      6. Bounds
      7. Coercion
      8. Static
      9. Elision
  17. Traits
    1. Derive
    2. Returning Traits with dyn
    3. Operator Overloading
    4. Drop
    5. Iterators
    6. impl Trait
    7. Clone
    8. Supertraits
    9. Disambiguating overlapping traits
  18. macro_rules!
    1. Syntax
      1. Designators
      2. Overload
      3. Repeat
    2. DRY (Don't Repeat Yourself)
    3. DSL (Domain Specific Languages)
    4. Variadics
  19. Error handling
    1. panic
    2. abort & unwind
    3. Option & unwrap
      1. Unpacking options with ?
      2. Combinators: map
      3. Combinators: and_then
      4. Defaults: or, or_else, get_or_insert, get_or_insert_with
    4. Result
      1. map for Result
      2. aliases for Result
      3. Early returns
      4. Introducing ?
    5. Multiple error types
      1. Pulling Results out of Options
      2. Defining an error type
      3. Boxing errors
      4. Other uses of ?
      5. Wrapping errors
    6. Iterating over Results
  20. Std library types
    1. Box, stack and heap
    2. Vectors
    3. Strings
    4. Option
    5. Result
      1. ?
    6. panic!
    7. HashMap
      1. Alternate/custom key types
      2. HashSet
    8. Rc
    9. Arc
  21. Std misc
    1. Threads
      1. Testcase: map-reduce
    2. Channels
    3. Path
    4. File I/O
      1. open
      2. create
      3. read_lines
    5. Child processes
      1. Pipes
      2. Wait
    6. Filesystem Operations
    7. Program arguments
      1. Argument parsing
    8. Foreign Function Interface
  22. Testing
    1. Unit testing
    2. Documentation testing
    3. Integration testing
    4. Dev-dependencies
  23. Unsafe Operations
    1. Inline assembly
  24. Compatibility
    1. Raw identifiers
  25. Meta
    1. Documentation
    2. Playground