The FnOnce trait is automatically applied to any function that uses mutable borrows, immutable borrows, or moved variables to access data outside its own scope.
The is a loose requirement, which any function or closure will satisfy, so FnOnce is the most common of the function traits.