You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
let maybe_value:Option<i32> = Some(42);let result:Result<i32,String> = Ok(42);
Pattern matching
match age {0 => println!("You're a baby"),1..=17 => println!("You're a minor"),18..=64 => println!("You're an adult"),
_ => println!("You're a senior"),}
fnmain(){let number = Some(7);match number {Some(1) => println!("One"),Some(3) => println!("Three"),Some(7) => println!("Seven"),
_ => println!("Other"),}}
Async/Await (Requires the async-std or tokio library)
use async_std::task;asyncfnasync_function(){// Async code here}fnmain(){
task::block_on(async_function());}
Handling JSON with serde
use serde::{Deserialize,Serialize};#[derive(Serialize,Deserialize)]structPerson{name:String,age:i32,}let person = Person{name:String::from("John"),age:30,};let json = serde_json::to_string(&person).unwrap();
File downloads (with rocket web framework)
use rocket::tokio::fs::NamedFile;#[get("/download")]asyncfndownload() -> Option<NamedFile>{NamedFile::open("file.txt").await.ok()}
Web API (with Actix web framework)
use actix_web::{web,App,HttpServer,HttpResponse,Result};asyncfnindex() -> Result<HttpResponse>{Ok(HttpResponse::Ok().body("Hello, Actix!"))}#[actix_rt::main]asyncfnmain() -> std::io::Result<()>{HttpServer::new(|| {App::new().route("/", web::get().to(index))}).bind("127.0.0.1:8080")?
.run().await}
Working with Database (with Diesel ORM)
use diesel::prelude::*;#[derive(Queryable)]structUser{id:i32,name:String,}fnmain(){let connection = establish_connection();let results = users.filter(name.eq("Alice")).load::<User>(&connection).expect("Error loading users");for user in results {println!("ID: {}, Name: {}", user.id, user.name);}}
match result {Ok(value) => println!("Value is {}", value),Err(error) => eprintln!("Error: {}", error),}
Option and result unwrapper
let result = calculate_result();let value = result.unwrap_or_else(|error| {eprintln!("Error: {}", error);default_value()});
Concurrency with async-std
use async_std::task;asyncfnasync_function(){// Async code here}fnmain(){
task::block_on(async_function());}
Channels for concurrency
use std::sync::mpsc;use std::thread;let(sender, receiver) = mpsc::channel();
thread::spawn(move || {
sender.send("Message from another thread").unwrap();});let received = receiver.recv().unwrap();