Anki 25.06 Beta

Building the standalone sync-server using the instructions from Sync Server - Anki Manual in a fresh source checkout fails.

$ ./ninja extract:protoc
$ cargo install --path rslib/sync
[snip]
error: failed to run custom build command for `anki_i18n v0.0.0 (/tmp/anki/rslib/i18n)`
[snip]
  --- stderr

  thread 'main' panicked at rslib/i18n/gather.rs:63:37:
  called `Result::unwrap()` on an `Err` value: Os { code: 2, kind: NotFound, message: "No such file or directory" }
  note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
warning: build failed, waiting for other jobs to finish...
error: failed to compile `anki-sync-server v0.0.0 (/tmp/anki/rslib/sync)`, intermediate artifacts can be found at `/tmp/anki/target`.

after manually running ./ninja ftl_repo it still fails, which did not happen at tag 25.02.7.

$ cargo install --path rslib/sync
[snip]
error[E0432]: unresolved import `tokio::io::AsyncReadExt`
   --> rslib/src/sync/http_client/io_monitor.rs:20:5
    |
20  | use tokio::io::AsyncReadExt;
    |     ^^^^^^^^^^^^^^^^^^^^^^^ no `AsyncReadExt` in `io`
    |
note: found an item that was configured out
   --> /root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.45.1/src/io/mod.rs:277:131
    |
277 | ...lex, empty, repeat, sink, simplex, AsyncBufReadExt, AsyncReadExt, AsyncSeekExt, AsyncWriteExt,
    |                                                        ^^^^^^^^^^^^
note: the item is gated behind the `io-util` feature
   --> /root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.45.1/src/io/mod.rs:268:1
    |
268 | / cfg_io_util! {
269 | |     mod split;
270 | |     pub use split::{split, ReadHalf, WriteHalf};
271 | |     mod join;
...   |
279 | |     };
280 | | }
    | |_^
    = note: this error originates in the macro `cfg_io_util` (in Nightly builds, run with -Z macro-backtrace for more info)
help: a similar name exists in the module
    |
20  - use tokio::io::AsyncReadExt;
20  + use tokio::io::AsyncRead;
    |
help: consider importing this trait instead
    |
20  - use tokio::io::AsyncReadExt;
20  + use futures::AsyncReadExt;
    |

error[E0432]: unresolved import `tokio::io::AsyncReadExt`
   --> rslib/src/sync/request/header_and_stream.rs:20:5
    |
20  | use tokio::io::AsyncReadExt;
    |     ^^^^^^^^^^^^^^^^^^^^^^^ no `AsyncReadExt` in `io`
    |
note: found an item that was configured out
   --> /root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.45.1/src/io/mod.rs:277:131
    |
277 | ...lex, empty, repeat, sink, simplex, AsyncBufReadExt, AsyncReadExt, AsyncSeekExt, AsyncWriteExt,
    |                                                        ^^^^^^^^^^^^
note: the item is gated behind the `io-util` feature
   --> /root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.45.1/src/io/mod.rs:268:1
    |
268 | / cfg_io_util! {
269 | |     mod split;
270 | |     pub use split::{split, ReadHalf, WriteHalf};
271 | |     mod join;
...   |
279 | |     };
280 | | }
    | |_^
    = note: this error originates in the macro `cfg_io_util` (in Nightly builds, run with -Z macro-backtrace for more info)
help: a similar name exists in the module
    |
20  - use tokio::io::AsyncReadExt;
20  + use tokio::io::AsyncRead;
    |
help: consider importing this trait instead
    |
20  - use tokio::io::AsyncReadExt;
20  + use futures::AsyncReadExt;
    |

error[E0599]: no method named `read_to_end` found for struct `StreamReader` in the current scope
   --> rslib/src/sync/http_client/io_monitor.rs:140:18
    |
139 | /             reader
140 | |                 .read_to_end(&mut buf)
    | |                 -^^^^^^^^^^^ method not found in `StreamReader<MapErr<..., ...>, ...>`
    | |_________________|
    |

error[E0599]: `ZstdDecoder<StreamReader<MapErr<S, {closure@...}>, ...>>` is not an iterator
  --> rslib/src/sync/request/header_and_stream.rs:68:10
   |
67 | /     reader
68 | |         .take(*MAXIMUM_SYNC_PAYLOAD_BYTES_UNCOMPRESSED)
   | |         -^^^^ `ZstdDecoder<StreamReader<MapErr<S, {closure@...}>, ...>>` is not an iterator
   | |_________|
   |
   |
  ::: /root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/async-compression-0.4.25/src/tokio/bufread/mod.rs:10:1
   |
10 |   algos!(tokio::bufread<R>);
   |   ------------------------- doesn't satisfy `_: Iterator`
   |
   = note: the following trait bounds were not satisfied:
           `async_compression::tokio::bufread::ZstdDecoder<StreamReader<futures::stream::MapErr<S, {closure@rslib/src/sync/request/header_and_stream.rs:63:22: 63:25}>, bytes::Bytes>>: std::iter::Iterator`
           which is required by `&mut async_compression::tokio::bufread::ZstdDecoder<StreamReader<futures::stream::MapErr<S, {closure@rslib/src/sync/request/header_and_stream.rs:63:22: 63:25}>, bytes::Bytes>>: std::iter::Iterator`

Some errors have detailed explanations: E0432, E0599.
For more information about an error, try `rustc --explain E0432`.
error: could not compile `anki` (lib) due to 4 previous errors
error: failed to compile `anki-sync-server v0.0.0 (/tmp/anki/rslib/sync)`, intermediate artifacts can be found at `/tmp/anki/target`.