Typically, when we call a function in Rust, we will have a line in the code similar to this:
call_some_method(some_value);
When we have a struct in the code which has an impl attached to it, we will have this:
let m = MyStruct {a: 3, b: 4, c: 1, d: 4}; m.call_some_method();
These are both fine.
If you recall, back in the generic_trait_full example, we had Calc defined and T could be either an f32 or i32. We also talked about how the application knew what to include in the final binary. This is known as static dispatch (which Rust prefers).
Rust uses a system called a dispatch, of which there are two types: static (favored by Rust) and dynamic. Dynamic dispatch relies on something called a trait object.