- 1. Welcome
- 1.1. Syntax
- 2. A Basic Calculator
- 2.1. Integers
- 2.2. Variables
- 2.3. Branching: if/else
- 2.4. Panics
- 2.5. Factorial
- 2.6. Loops: while
- 2.7. Loops: for
- 2.8. Overflow and underflow
- 2.9. Saturating arithmetic
- 2.10. Conversions: as casting
- 3. Ticket v1
- 3.1. Structs
- 3.2. Validation
- 3.3. Modules
- 3.4. Visibility
- 3.5. Encapsulation
- 3.6. Ownership
- 3.7. Setters
- 3.8. Stack
- 3.9. Heap
- 3.10. References in memory
- 3.11. Destructors
- 3.12. Outro
- 4. Traits
- 4.1. Trait
- 4.2. Orphan rule
- 4.3. Operator overloading
- 4.4. Derive macros
- 4.5. Trait bounds
- 4.6. String slices
- 4.7. Deref trait
- 4.8. Sized trait
- 4.9. From trait
- 4.10. Associated vs generic types
- 4.11. Clone trait
- 4.12. Copy trait
- 4.13. Drop trait
- 4.14. Outro
- 5. Ticket v2
- 5.1. Enums
- 5.2. Branching: match
- 5.3. Variants with data
- 5.4. Branching: if let and let/else
- 5.5. Nullability
- 5.6. Fallibility
- 5.7. Unwrap
- 5.8. Error enums
- 5.9. Error trait
- 5.10. Packages
- 5.11. Dependencies
- 5.12. thiserror
- 5.13. TryFrom trait
- 5.14. Error::source
- 5.15. Outro
- 6. Ticket Management
- 6.1. Arrays
- 6.2. Vectors
- 6.3. Resizing
- 6.4. Iterators
- 6.5. Iter
- 6.6. Lifetimes
- 6.7. Combinators
- 6.8. impl Trait
- 6.9. impl Trait, pt.2
- 6.10. Slices
- 6.11. Mutable slices
- 6.12. Two states
- 6.13. Index trait
- 6.14. IndexMut trait
- 6.15. HashMap
- 6.16. BTreeMap
- 7. Threads
- 7.1. Threads
- 7.2. 'static lifetime
- 7.3. Leaking memory
- 7.4. Scoped threads
- 7.5. Channels
- 7.6. Interior mutability
- 7.7. Ack pattern
- 7.8. Client
- 7.9. Bounded channels
- 7.10. Patching
- 7.11. Mutex, Send and Arc
- 7.12. RwLock
- 7.13. Without channels
- 7.14. Sync trait
- 8. Futures
- 8.1. Asynchronous functions
- 8.2. Spawning tasks
- 8.3. Runtime
- 8.4. Future trait
- 8.5. Blocking the runtime
- 8.6. Async-aware primitives
- 8.7. Cancellation
- 8.8. Outro
- 9. Going further