title: Substrate error in both nightly & stable versions
body: <p>I use rust stable 1.55.0, run <code>cargo build --release</code> then having the below error in partity-db crate</p>
  <pre><code> error[E0308]: mismatched types
     --&gt; C:\Users\USER\.cargo\registry\src\github.com-1ecc6299db9ec823\parity-db-0.3.1\src\index.rs:502:3
      |
  501 |     fn madvise_random(&amp;self, _map: &amp;mut memmap2::MmapMut) {
      |                                                           - expected `()` because of default return type
  502 |         Ok(())
      |         ^^^^^^- help: consider using a semicolon here: `;`
      |         |
      |         expected `()`, found enum `std::result::Result`
      |
      = note: expected unit type `()`
                      found enum `std::result::Result&lt;(), _&gt;`
  
  For more information about this error, try `rustc --explain E0308`.
  error: could not compile `parity-db` due to previous error
  </code></pre>
  <p>When I switch to rust version 1.57.0-nightly, having another error in prost-derive crate</p>
  <pre><code>error[E0034]: multiple applicable items in scope
     --&gt; C:\Users\USER\.cargo\registry\src\github.com-1ecc6299db9ec823\prost-derive-0.7.0\src\lib.rs:109:14
      |
  109 |             .intersperse(quote!(|));
      |              ^^^^^^^^^^^ multiple intersperse found
      |
      = note: candidate #1 is defined in an impl of the trait Iterator for the type Map&lt;I, F&gt;
      = note: candidate #2 is defined in an impl of the trait Itertools for the type T
  help: disambiguate the associated function for candidate #1
      |
  105 ~         let tags = Iterator::intersperse(field
  106 +             .tags()
  107 +             .into_iter()
  108 +             .map(|tag| quote!(#tag)), {
  109 +         let mut _s = $crate::__private::TokenStream::new();
  110 +         $crate::quote_each_token!(_s $($tt)*);
    ...
  help: disambiguate the associated function for candidate #2
      |
  105 ~         let tags = Itertools::intersperse(field
  106 +             .tags()
  107 +             .into_iter()
  108 +             .map(|tag| quote!(#tag)), {
  109 +         let mut _s = $crate::__private::TokenStream::new();
  110 +         $crate::quote_each_token!(_s $($tt)*);
    ...
  
  For more information about this error, try rustc --explain E0034.
  error: could not compile prost-derive due to previous error
  warning: build failed, waiting for other jobs to finish...
  error: build failed
  </code></pre>
  <p>How can I fix this? Thank you!</p>