A struct is how you name and group related data into your own type. Rust gives you three shapes, and you'll reach for the first one most.
Named-field structs
The workhorse: fields with names and types. You create an instance by naming each field, and access fields with dot notation. Because the fields are named, the code reads itself — user.email beats user.2 every time.
Tuple structs and unit structs
A tuple struct has typed fields without names — handy for a thin wrapper like struct Meters(f64) that gives a bare number a distinct type. A unit struct has no fields at all — useful as a marker or when you'll implement a trait on it but store no data. Both are niche; named-field structs carry the day.
email instead of email: email. And ..other at the end of a literal fills remaining fields from another instance — great for 'same as that one, but change this.'Structs are the heart of modeling
Where ownership tells you how data moves, structs tell you what the data is. A well-named struct with well-chosen field types makes invalid states hard to represent — the first half of Rust's 'make illegal states unrepresentable' philosophy. (The other half is enums, the very next track.)