The ! indicates the object you are "calling" is a macro, which essentially replaces that call with the equivalent syntax which is produced by applying the macro.
In addition to the older hygenic macros (which have their own syntax to define them), Rust also supports proc_macros, which are actually code that is executed by the compiler and can preprocess a struct or function.
For more information, see the Rust Book (second edition) section on macros:
https://doc.rust-lang.org/book/second-edition/appendix-04-ma...