dariusc93 / rust-ipfs

The InterPlanetary File System (IPFS), implemented in Rust.
Apache License 2.0
36 stars 7 forks source link

Reached type-length limit error when using axum with `cargo run` #261

Open rieval opened 1 month ago

rieval commented 1 month ago

Hello, I encountered a type-length limit error when using axum in my project. The error occurs when I execute cargo run. Here are the details of my setup and the error message:

snipped log:

   Compiling rcgen v0.13.1
   Compiling libp2p v0.53.2
   Compiling libp2p-relay-manager v0.2.5 (https://github.com/dariusc93/rust-ipfs.git#e23881d5)
   Compiling rust-ipns v0.6.0 (https://github.com/dariusc93/rust-ipfs.git#e23881d5)
   Compiling rust-ipfs v0.11.20 (https://github.com/dariusc93/rust-ipfs.git#e23881d5)
   Compiling rust-demo v0.1.0 (C:\Users\admin\Desktop\rust-demo)
error: reached the type-length limit while instantiating `<std::iter::Chain<std::iter::Map<std::iter::Chain<std::iter::Map<std::iter::Chain<..., ...>, ...>, ...>, ...>, ...> as Iterator>::fold::<..., ...>`
   --> C:\Users\admin\.rustup\toolchains\nightly-x86_64-pc-windows-msvc\lib/rustlib/src/rust\library\core\src\iter\adapters\map.rs:129:9
    |
129 |         self.iter.fold(init, map_fold(self.f, g))
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = help: consider adding a `#![type_length_limit="23949260"]` attribute to your crate
    = note: the full type name has been written to 'C:\Users\admin\Desktop\rust-demo\target\debug\deps\rust_demo.long-type.txt'       

error: could not compile `rust-demo` (bin "rust-demo") due to 1 previous error

rust_demo.long-type.txt

main.rs:

use axum::{http::StatusCode, response::IntoResponse, routing::get, Router};
use rust_ipfs::UninitializedIpfsNoop;
use tokio::net::TcpListener;

#[tokio::main]
async fn main() {
    axum::serve(
        TcpListener::bind("0.0.0.0:3090").await.unwrap(),
        Router::new().route("/", get(handler)).into_make_service(),
    )
    .await
    .ok();
}

async fn handler() -> impl IntoResponse {
    let ipfs = UninitializedIpfsNoop::new()
        .with_default()
        .listen_as_external_addr()
        .start()
        .await
        .unwrap();
    ipfs.default_bootstrap().await.ok();
    ipfs.bootstrap().await.ok();
    (StatusCode::OK, "hello world!")
}

Cargo.toml:

[package]
name = "rust-demo"
version = "0.1.0"
edition = "2021"

[dependencies]
axum = { git = "https://github.com/tokio-rs/axum.git" }
rust-ipfs = { git = "https://github.com/dariusc93/rust-ipfs.git" }
tokio = { version = "1.38", features = ["net", "rt", "rt-multi-thread"] }

toolchain: nightly-x86_64-pc-windows-msvc (default) rustc 1.81.0-nightly (5315cbe15 2024-07-11)

It is confusing because the GitHub workflow of my project showed that the build passed on June 28th, so I'm not sure if it's caused by the nightly version of the compiler.

rieval commented 1 month ago

Okay...it seems to be caused by the compiler https://github.com/rust-lang/rust/pull/125507

dariusc93 commented 1 month ago

Thank you for the report. It looks like it been disabled by default now but that is something i will keep my eyes on

rieval commented 1 month ago

Thank you! The issue has been resolved for me. I will keep this issue open, feel free to close it if you think it is no longer necessary.