Structs in rust let you structure data together. Similar to objects in javascript
struct User {
active: bool,
username: String,
email: String,
sign_in_count: u64,
}
fn main() {
let user1 = User {
active: true,
username: String::from("someusername123"),
email: String::from("[email protected]"),
sign_in_count: 1,
};
print!("User 1 username: {:?}", user1.username);
}
Can you guess if they are stored in stack or heap?

Try running experiments around
mutable and immutable referencesfor structs
struct User {
active: bool,
sign_in_count: u64,
}
fn main() {
let mut user1 = User {
active: true,
sign_in_count: 1,
};
print_name(user1);
print!("User 1 username: {}", user1.active); // Error - can not use borrowed value
}
fn print_name(user1: User) {
print!("User 1 username: {}", user1.active);
}
Add the copy trait
#[derive(Copy, Clone)]
struct User {
active: bool,
sign_in_count: u64,
}
fn main() {
let mut user1 = User {
active: true,
sign_in_count: 1,
};
print_name(user1);
print!("User 1 username: {}", user1.active); // Error goes away because user1 is copied
}
fn print_name(user1: User) {
print!("User 1 username: {}", user1.active);
}
struct User {
active: bool,
sign_in_count: u64,
username: String,
}
fn main() {
let mut user1 = User {
active: true,
sign_in_count: 1,
username: "harkirat".to_string()
};
change_name(user1);
print!("User 1 username: {}", user1.active); // Error - can not use borrowed value
}
fn change_name(user1: User) {
print!("User 1 username: {:?}", user1.active);
}
Try adding the Copy trait (you wont be able to because strings dont implement them, use clone trait instead)
#[derive(Clone)]
struct User {
active: bool,
sign_in_count: u64,
username: String,
}
fn main() {
let mut user1 = User {
active: true,
sign_in_count: 1,
username: "harkirat".to_string()
};
change_name(user1.clone());
print!("User 1 username: {}", user1.active); // Error - can not use borrowed value
}
fn change_name(user1: User) {
print!("User 1 username: {:?}", user1.active);
}