The trait guarantees that the data are either written in full or, in case
of an error, none of the data is written. Types implementing the trait must
also guarantee that multiple attempts to write do not result in
data to be written out of the initial ordering.