I wrote a small function to return the Sha512 of a file's content. I auto-completed the function's return type and got this:
use sha2::{Digest, Sha512};
pub fn sha512_for<P: AsRef<Path>>(
path_in: P,
) -> Result<
sha2::digest::generic_array::GenericArray<
u8,
sha2::digest::typenum::UInt<
sha2::digest::typenum::UInt<
sha2::digest::typenum::UInt<
sha2::digest::typenum::UInt<
sha2::digest::typenum::UInt<
sha2::digest::typenum::UInt<
sha2::digest::typenum::UInt<
sha2::digest::typenum::UTerm,
sha2::digest::consts::B1,
>,
sha2::digest::consts::B0,
>,
sha2::digest::consts::B0,
>,
sha2::digest::consts::B0,
>,
sha2::digest::consts::B0,
>,
sha2::digest::consts::B0,
>,
sha2::digest::consts::B0,
>,
>,
std::io::Error,
> {
let mut hasher = Sha512::new();
let file_content = std::fs::read(path_in)?;
hasher.update(file_content);
Ok(hasher.finalize())
}
In my short rust programming experience I had never seen such a beast. The return type is longer than the function body!
I'm wondering: how am I supposed to write such a type signature myself?
Am I missing something that make this more manageable ?