If you look at the source code in the simplestruct file, you'll find the structures at the start with the code under it. There is nothing wrong with that, but after a while, it becomes cumbersome, especially if we have a lot of structures and enumerations.
To remove this problem, we can split the structures and code over two files.
However, before we build the code, we will have to provide the main.rs file with some sort of pointer to the structures. We can do this in one of three ways. The simplest is to use the include! macro:
include!("structs.rs");
This just inserts the contents of the file in the place of the macro call, so it's not the most elegant way and completely sidesteps Rust's module system. So let's look at a better way.
The better way is to reference the module using the following snippet:
mod structs; use structs::*;
This can lead to a large number of issues, the biggest being the protection level, public or private. When compiled like this, many errors, such as the following example, occur:
The error will indicate that, though the structure is public, the fields within it aren't, so they can't be accessed. The solution is to make all of the fields public.