Open PSeitz opened 4 days ago
Quickwit compile times are pretty long, this could by some part be caused by overly complex warp types. Below is an example of such a type. We probably should break these type chains by boxing them.
83 (0.0%, 87.8%) 2 (0.0%, 65.4%) core::ptr::drop_in_place<warp::filter::or::Or<warp::filter::or::Or<warp::filter::or::Or<warp::filter::or::Or<warp::filter::or::Or<warp::filter::or::Or<warp::filter::or::Or<warp::filter::or::Or<warp::filter::or::Or<warp::filter::or::Or<warp::filter::or::Or<warp::filter::or::Or<warp::filter::or::Or<warp::filter::map::Map<warp::filter::and::And<warp::filter::then::Then<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filters::any::Any,warp::filters::path::Exact<warp::filters::path::internal::Opaque>>,warp::filter::FilterFn<warp::filters::path::filter_segment<warp::filters::path::param::{{closure}},(alloc::string::String,)>::{{closure}}>>,warp::filter::FilterFn<warp::filters::path::end::{{closure}}>>,warp::filter::FilterFn<warp::filters::method::method_is<warp::filters::method::get::{{closure}}>::{{closure}}>>,warp::filter::map::Map<warp::filters::any::Any,quickwit_serve::with_arg::{{closure}}>>,quickwit_serve::index_api::rest_handler::get_index_metadata>,warp::filter::map::Map<warp::filter::and_then::AndThen<warp::filter::or_else::OrElse<warp::filter::FilterFn<warp::filter::filter_fn_one<warp::filters::query::raw::{{closure}},futures_util::future::ready::Ready<core::result::Result<alloc::string::String,warp::reject::Rejection>>>::{{closure}}>,serde_qs::warp::query::{{closure}}>,serde_qs::warp::query::{{closure}}>,quickwit_serve::format::extract_format_from_qs::{{closure}}>>,quickwit_serve::rest_api_response::into_rest_api_response<quickwit_metastore::metastore::index_metadata::IndexMetadata,quickwit_proto::metastore::MetastoreError>>,warp::filter::map::Map<warp::filter::and::And<warp::filter::then::Then<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filters::any::Any,warp::filters::path::Exact<warp::filters::path::internal::Opaque>>,warp::filter::FilterFn<warp::filters::path::end::{{closure}}>>,warp::filter::FilterFn<warp::filters::method::method_is<warp::filters::method::get::{{closure}}>::{{closure}}>>,warp::filter::and_then::AndThen<warp::filter::or_else::OrElse<warp::filter::FilterFn<warp::filter::filter_fn_one<warp::filters::query::raw::{{closure}},futures_util::future::ready::Ready<core::result::Result<alloc::string::String,warp::reject::Rejection>>>::{{closure}}>,serde_qs::warp::query::{{closure}}>,serde_qs::warp::query::{{closure}}>>,warp::filter::map::Map<warp::filters::any::Any,quickwit_serve::with_arg::{{closure}}>>,quickwit_serve::index_api::rest_handler::list_indexes_metadata>,warp::filter::map::Map<warp::filter::and_then::AndThen<warp::filter::or_else::OrElse<warp::filter::FilterFn<warp::filter::filter_fn_one<warp::filters::query::raw::{{closure}},futures_util::future::ready::Ready<core::result::Result<alloc::string::String,warp::reject::Rejection>>>::{{closure}}>,serde_qs::warp::query::{{closure}}>,serde_qs::warp::query::{{closure}}>,quickwit_serve::format::extract_format_from_qs::{{closure}}>>,quickwit_serve::rest_api_response::into_rest_api_response<alloc::vec::Vec,quickwit_proto::metastore::MetastoreError>>>,warp::filter::map::Map<warp::filter::and::And<warp::filter::map::Map<warp::filter::then::Then<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filters::any::Any,warp::filters::path::Exact<warp::filters::path::internal::Opaque>>,warp::filter::FilterFn<warp::filters::path::end::{{closure}}>>,warp::filter::FilterFn<warp::filters::method::method_is<warp::filters::method::post::{{closure}}>::{{closure}}>>,warp::filter::and_then::AndThen<warp::filter::or_else::OrElse<warp::filter::FilterFn<warp::filter::filter_fn_one<warp::filters::query::raw::{{closure}},futures_util::future::ready::Ready<core::result::Result<alloc::string::String,warp::reject::Rejection>>>::{{closure}}>,serde_qs::warp::query::{{closure}}>,serde_qs::warp::query::{{closure}}>>,warp::filter::and_then::AndThen<warp::filter::FilterFn<warp::filter::filter_fn_one<warp::filters::header::optional::{{closure}},futures_util::future::ready::Ready<core::result::Result<core::option::Option,warp::reject::Rejection>>>::{{closure}}>,quickwit_serve::format::extract_config_format::{{closure}}>>,warp::filter::untuple_one::UntupleOne<warp::filter::and_then::AndThen<warp::filter::map_err::MapErr<warp::filter::FilterFn<warp::filter::filter_fn_one<warp::filters::header::header2::{{closure}},futures_util::future::ready::Ready<core::result::Result<headers::common::content_length::ContentLength,warp::reject::Rejection>>>::{{closure}}>,warp::filters::body::content_length_limit::{{closure}}>,warp::filters::body::content_length_limit::{{closure}}>>>,warp::filter::and_then::AndThen<warp::filter::FilterFn<warp::filter::filter_fn_one<warp::filters::body::body::{{closure}},futures_util::future::ready::Ready<core::result::Result<hyper::body::body::Body,warp::reject::Rejection>>>::{{closure}}>,warp::filters::body::bytes::{{closure}}>>,warp::filter::map::Map<warp::filters::any::Any,quickwit_serve::with_arg::{{closure}}>>,warp::filter::map::Map<warp::filters::any::Any,quickwit_serve::with_arg<alloc::sync::Arc>::{{closure}}>>,quickwit_serve::index_api::rest_handler::create_index>,quickwit_serve::index_api::rest_handler::log_failure<quickwit_metastore::metastore::index_metadata::IndexMetadata,quickwit_index_management::index::IndexServiceError>::{{closure}}>,warp::filter::map::Map<warp::filter::and_then::AndThen<warp::filter::or_else::OrElse<warp::filter::FilterFn<warp::filter::filter_fn_one<warp::filters::query::raw::{{closure}},futures_util::future::ready::Ready<core::result::Result<alloc::string::String,warp::reject::Rejection>>>::{{closure}}>,serde_qs::warp::query::{{closure}}>,serde_qs::warp::query::{{closure}}>,quickwit_serve::format::extract_format_from_qs::{{closure}}>>,quickwit_serve::rest_api_response::into_rest_api_response<quickwit_metastore::metastore::index_metadata::IndexMetadata,quickwit_index_management::index::IndexServiceError>>>,warp::filter::map::Map<warp::filter::and::And<warp::filter::map::Map<warp::filter::then::Then<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filters::any::Any,warp::filters::path::Exact<warp::filters::path::internal::Opaque>>,warp::filter::FilterFn<warp::filters::path::filter_segment<warp::filters::path::param::{{closure}},(alloc::string::String,)>::{{closure}}>>,warp::filter::FilterFn<warp::filters::path::end::{{closure}}>>,warp::filter::FilterFn<warp::filters::method::method_is<warp::filters::method::put::{{closure}}>::{{closure}}>>,warp::filter::and_then::AndThen<warp::filter::FilterFn<warp::filter::filter_fn_one<warp::filters::header::optional::{{closure}},futures_util::future::ready::Ready<core::result::Result<core::option::Option,warp::reject::Rejection>>>::{{closure}}>,quickwit_serve::format::extract_config_format::{{closure}}>>,warp::filter::untuple_one::UntupleOne<warp::filter::and_then::AndThen<warp::filter::map_err::MapErr<warp::filter::FilterFn<warp::filter::filter_fn_one<warp::filters::header::header2::{{closure}},futures_util::future::ready::Ready<core::result::Result<headers::common::content_length::ContentLength,warp::reject::Rejection>>>::{{closure}}>,warp::filters::body::content_length_limit::{{closure}}>,warp::filters::body::content_length_limit::{{closure}}>>>,warp::filter::and_then::AndThen<warp::filter::FilterFn<warp::filter::filter_fn_one<warp::filters::body::body::{{closure}},futures_util::future::ready::Ready<core::result::Result<hyper::body::body::Body,warp::reject::Rejection>>>::{{closure}}>,warp::filters::body::bytes::{{closure}}>>,warp::filter::map::Map<warp::filters::any::Any,quickwit_serve::with_arg::{{closure}}>>,quickwit_serve::index_api::rest_handler::update_index>,quickwit_serve::index_api::rest_handler::log_failure<quickwit_metastore::metastore::index_metadata::IndexMetadata,quickwit_index_management::index::IndexServiceError>::{{closure}}>,warp::filter::map::Map<warp::filter::and_then::AndThen<warp::filter::or_else::OrElse<warp::filter::FilterFn<warp::filter::filter_fn_one<warp::filters::query::raw::{{closure}},futures_util::future::ready::Ready<core::result::Result<alloc::string::String,warp::reject::Rejection>>>::{{closure}}>,serde_qs::warp::query::{{closure}}>,serde_qs::warp::query::{{closure}}>,quickwit_serve::format::extract_format_from_qs::{{closure}}>>,quickwit_serve::rest_api_response::into_rest_api_response<quickwit_metastore::metastore::index_metadata::IndexMetadata,quickwit_index_management::index::IndexServiceError>>>,warp::filter::map::Map<warp::filter::and::And<warp::filter::then::Then<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filters::any::Any,warp::filters::path::Exact<warp::filters::path::internal::Opaque>>,warp::filter::FilterFn<warp::filters::path::filter_segment<warp::filters::path::param::{{closure}},(alloc::string::String,)>::{{closure}}>>,warp::filters::path::Exact<warp::filters::path::internal::Opaque>>,warp::filter::FilterFn<warp::filters::path::end::{{closure}}>>,warp::filter::FilterFn<warp::filters::method::method_is<warp::filters::method::put::{{closure}}>::{{closure}}>>,warp::filter::map::Map<warp::filters::any::Any,quickwit_serve::with_arg::{{closure}}>>,quickwit_serve::index_api::rest_handler::clear_index>,warp::filter::map::Map<warp::filter::and_then::AndThen<warp::filter::or_else::OrElse<warp::filter::FilterFn<warp::filter::filter_fn_one<warp::filters::query::raw::{{closure}},futures_util::future::ready::Ready<core::result::Result<alloc::string::String,warp::reject::Rejection>>>::{{closure}}>,serde_qs::warp::query::{{closure}}>,serde_qs::warp::query::{{closure}}>,quickwit_serve::format::extract_format_from_qs::{{closure}}>>,quickwit_serve::rest_api_response::into_rest_api_response<(),quickwit_index_management::index::IndexServiceError>>>,warp::filter::map::Map<warp::filter::and::And<warp::filter::then::Then<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filters::any::Any,warp::filters::path::Exact<warp::filters::path::internal::Opaque>>,warp::filter::FilterFn<warp::filters::path::filter_segment<warp::filters::path::param::{{closure}},(alloc::string::String,)>::{{closure}}>>,warp::filter::FilterFn<warp::filters::path::end::{{closure}}>>,warp::filter::FilterFn<warp::filters::method::method_is<warp::filters::method::delete::{{closure}}>::{{closure}}>>,warp::filter::and_then::AndThen<warp::filter::or_else::OrElse<warp::filter::FilterFn<warp::filter::filter_fn_one<warp::filters::query::raw::{{closure}},futures_util::future::ready::Ready<core::result::Result<alloc::string::String,warp::reject::Rejection>>>::{{closure}}>,serde_qs::warp::query::{{closure}}>,serde_qs::warp::query::{{closure}}>>,warp::filter::map::Map<warp::filters::any::Any,quickwit_serve::with_arg::{{closure}}>>,quickwit_serve::index_api::rest_handler::delete_index>,warp::filter::map::Map<warp::filter::and_then::AndThen<warp::filter::or_else::OrElse<warp::filter::FilterFn<warp::filter::filter_fn_one<warp::filters::query::raw::{{closure}},futures_util::future::ready::Ready<core::result::Result<alloc::string::String,warp::reject::Rejection>>>::{{closure}}>,serde_qs::warp::query::{{closure}}>,serde_qs::warp::query::{{closure}}>,quickwit_serve::format::extract_format_from_qs::{{closure}}>>,quickwit_serve::rest_api_response::into_rest_api_response<alloc::vec::Vec,quickwit_index_management::index::IndexServiceError>>>,warp::filter::map::Map<warp::filter::and::And<warp::filter::then::Then<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filters::any::Any,warp::filters::path::Exact<warp::filters::path::internal::Opaque>>,warp::filter::FilterFn<warp::filters::path::filter_segment<warp::filters::path::param::{{closure}},(alloc::string::String,)>::{{closure}}>>,warp::filters::path::Exact<warp::filters::path::internal::Opaque>>,warp::filter::FilterFn<warp::filters::path::end::{{closure}}>>,warp::filter::FilterFn<warp::filters::method::method_is<warp::filters::method::get::{{closure}}>::{{closure}}>>,warp::filter::and_then::AndThen<warp::filter::or_else::OrElse<warp::filter::FilterFn<warp::filter::filter_fn_one<warp::filters::query::raw::{{closure}},futures_util::future::ready::Ready<core::result::Result<alloc::string::String,warp::reject::Rejection>>>::{{closure}}>,serde_qs::warp::query::{{closure}}>,serde_qs::warp::query::{{closure}}>>,warp::filter::map::Map<warp::filters::any::Any,quickwit_serve::with_arg::{{closure}}>>,quickwit_serve::index_api::rest_handler::list_splits>,warp::filter::map::Map<warp::filter::and_then::AndThen<warp::filter::or_else::OrElse<warp::filter::FilterFn<warp::filter::filter_fn_one<warp::filters::query::raw::{{closure}},futures_util::future::ready::Ready<core::result::Result<alloc::string::String,warp::reject::Rejection>>>::{{closure}}>,serde_qs::warp::query::{{closure}}>,serde_qs::warp::query::{{closure}}>,quickwit_serve::format::extract_format_from_qs::{{closure}}>>,quickwit_serve::rest_api_response::into_rest_api_response<quickwit_serve::index_api::rest_handler::ListSplitsResponse,quickwit_proto::metastore::MetastoreError>>>,warp::filter::map::Map<warp::filter::and::And<warp::filter::then::Then<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filters::any::Any,warp::filters::path::Exact<warp::filters::path::internal::Opaque>>,warp::filter::FilterFn<warp::filters::path::filter_segment<warp::filters::path::param::{{closure}},(alloc::string::String,)>::{{closure}}>>,warp::filters::path::Exact<warp::filters::path::internal::Opaque>>,warp::filter::FilterFn<warp::filters::path::end::{{closure}}>>,warp::filter::FilterFn<warp::filters::method::method_is<warp::filters::method::get::{{closure}}>::{{closure}}>>,warp::filter::map::Map<warp::filters::any::Any,quickwit_serve::with_arg::{{closure}}>>,quickwit_serve::index_api::rest_handler::describe_index>,warp::filter::map::Map<warp::filter::and_then::AndThen<warp::filter::or_else::OrElse<warp::filter::FilterFn<warp::filter::filter_fn_one<warp::filters::query::raw::{{closure}},futures_util::future::ready::Ready<core::result::Result<alloc::string::String,warp::reject::Rejection>>>::{{closure}}>,serde_qs::warp::query::{{closure}}>,serde_qs::warp::query::{{closure}}>,quickwit_serve::format::extract_format_from_qs::{{closure}}>>,quickwit_serve::rest_api_response::into_rest_api_response<quickwit_serve::index_api::rest_handler::IndexStats,quickwit_proto::metastore::MetastoreError>>>,warp::filter::map::Map<warp::filter::and::And<warp::filter::then::Then<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filters::any::Any,warp::filters::path::Exact<warp::filters::path::internal::Opaque>>,warp::filter::FilterFn<warp::filters::path::filter_segment<warp::filters::path::param::{{closure}},(alloc::string::String,)>::{{closure}}>>,warp::filters::path::Exact<warp::filters::path::internal::Opaque>>,warp::filters::path::Exact<warp::filters::path::internal::Opaque>>,warp::filter::FilterFn<warp::filters::path::end::{{closure}}>>,warp::filter::FilterFn<warp::filters::method::method_is<warp::filters::method::put::{{closure}}>::{{closure}}>>,warp::filter::and::And<warp::filter::untuple_one::UntupleOne<warp::filter::and_then::AndThen<warp::filter::map_err::MapErr<warp::filter::FilterFn<warp::filter::filter_fn_one<warp::filters::header::header2::{{closure}},futures_util::future::ready::Ready<core::result::Result<headers::common::content_length::ContentLength,warp::reject::Rejection>>>::{{closure}}>,warp::filters::body::content_length_limit::{{closure}}>,warp::filters::body::content_length_limit::{{closure}}>>,warp::filter::and_then::AndThen<warp::filter::and::And<warp::filter::FilterFn<warp::filters::body::is_content_type::{{closure}}>,warp::filter::and_then::AndThen<warp::filter::FilterFn<warp::filter::filter_fn_one<warp::filters::body::body::{{closure}},futures_util::future::ready::Ready<core::result::Result<hyper::body::body::Body,warp::reject::Rejection>>>::{{closure}}>,warp::filters::body::bytes::{{closure}}>>,warp::filters::body::json::{{closure}}>>>,warp::filter::map::Map<warp::filters::any::Any,quickwit_serve::with_arg::{{closure}}>>,quickwit_serve::index_api::rest_handler::mark_splits_for_deletion>,warp::filter::map::Map<warp::filter::and_then::AndThen<warp::filter::or_else::OrElse<warp::filter::FilterFn<warp::filter::filter_fn_one<warp::filters::query::raw::{{closure}},futures_util::future::ready::Ready<core::result::Result<alloc::string::String,warp::reject::Rejection>>>::{{closure}}>,serde_qs::warp::query::{{closure}}>,serde_qs::warp::query::{{closure}}>,quickwit_serve::format::extract_format_from_qs::{{closure}}>>,quickwit_serve::rest_api_response::into_rest_api_response<(),quickwit_proto::metastore::MetastoreError>>>,warp::filter::map::Map<warp::filter::and::And<warp::filter::then::Then<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filters::any::Any,warp::filters::path::Exact<warp::filters::path::internal::Opaque>>,warp::filter::FilterFn<warp::filters::path::filter_segment<warp::filters::path::param::{{closure}},(alloc::string::String,)>::{{closure}}>>,warp::filters::path::Exact<warp::filters::path::internal::Opaque>>,warp::filter::FilterFn<warp::filters::path::filter_segment<warp::filters::path::param::{{closure}},(alloc::string::String,)>::{{closure}}>>,warp::filters::path::Exact<warp::filters::path::internal::Opaque>>,warp::filter::FilterFn<warp::filters::path::end::{{closure}}>>,warp::filter::FilterFn<warp::filters::method::method_is<warp::filters::method::put::{{closure}}>::{{closure}}>>,warp::filter::map::Map<warp::filters::any::Any,quickwit_serve::with_arg::{{closure}}>>,quickwit_serve::index_api::rest_handler::reset_source_checkpoint>,warp::filter::map::Map<warp::filter::and_then::AndThen<warp::filter::or_else::OrElse<warp::filter::FilterFn<warp::filter::filter_fn_one<warp::filters::query::raw::{{closure}},futures_util::future::ready::Ready<core::result::Result<alloc::string::String,warp::reject::Rejection>>>::{{closure}}>,serde_qs::warp::query::{{closure}}>,serde_qs::warp::query::{{closure}}>,quickwit_serve::format::extract_format_from_qs::{{closure}}>>,quickwit_serve::rest_api_response::into_rest_api_response<(),quickwit_proto::metastore::MetastoreError>>>,warp::filter::map::Map<warp::filter::and::And<warp::filter::then::Then<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filters::any::Any,warp::filters::path::Exact<warp::filters::path::internal::Opaque>>,warp::filter::FilterFn<warp::filters::path::filter_segment<warp::filters::path::param::{{closure}},(alloc::string::String,)>::{{closure}}>>,warp::filters::path::Exact<warp::filters::path::internal::Opaque>>,warp::filter::FilterFn<warp::filters::path::filter_segment<warp::filters::path::param::{{closure}},(alloc::string::String,)>::{{closure}}>>,warp::filters::path::Exact<warp::filters::path::internal::Opaque>>,warp::filter::FilterFn<warp::filters::path::end::{{closure}}>>,warp::filter::FilterFn<warp::filters::method::method_is<warp::filters::method::put::{{closure}}>::{{closure}}>>,warp::filter::and::And<warp::filter::untuple_one::UntupleOne<warp::filter::and_then::AndThen<warp::filter::map_err::MapErr<warp::filter::FilterFn<warp::filter::filter_fn_one<warp::filters::header::header2::{{closure}},futures_util::future::ready::Ready<core::result::Result<headers::common::content_length::ContentLength,warp::reject::Rejection>>>::{{closure}}>,warp::filters::body::content_length_limit::{{closure}}>,warp::filters::body::content_length_limit::{{closure}}>>,warp::filter::and_then::AndThen<warp::filter::and::And<warp::filter::FilterFn<warp::filters::body::is_content_type::{{closure}}>,warp::filter::and_then::AndThen<warp::filter::FilterFn<warp::filter::filter_fn_one<warp::filters::body::body::{{closure}},futures_util::future::ready::Ready<core::result::Result<hyper::body::body::Body,warp::reject::Rejection>>>::{{closure}}>,warp::filters::body::bytes::{{closure}}>>,warp::filters::body::json::{{closure}}>>>,warp::filter::map::Map<warp::filters::any::Any,quickwit_serve::with_arg::{{closure}}>>,quickwit_serve::index_api::rest_handler::toggle_source>,warp::filter::map::Map<warp::filter::and_then::AndThen<warp::filter::or_else::OrElse<warp::filter::FilterFn<warp::filter::filter_fn_one<warp::filters::query::raw::{{closure}},futures_util::future::ready::Ready<core::result::Result<alloc::string::String,warp::reject::Rejection>>>::{{closure}}>,serde_qs::warp::query::{{closure}}>,serde_qs::warp::query::{{closure}}>,quickwit_serve::format::extract_format_from_qs::{{closure}}>>,quickwit_serve::rest_api_response::into_rest_api_response<(),quickwit_index_management::index::IndexServiceError>>>,warp::filter::map::Map<warp::filter::and::And<warp::filter::map::Map<warp::filter::then::Then<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filters::any::Any,warp::filters::path::Exact<warp::filters::path::internal::Opaque>>,warp::filter::FilterFn<warp::filters::path::filter_segment<warp::filters::path::param::{{closure}},(alloc::string::String,)>::{{closure}}>>,warp::filters::path::Exact<warp::filters::path::internal::Opaque>>,warp::filter::FilterFn<warp::filters::path::end::{{closure}}>>,warp::filter::FilterFn<warp::filters::method::method_is<warp::filters::method::post::{{closure}}>::{{closure}}>>,warp::filter::and_then::AndThen<warp::filter::FilterFn<warp::filter::filter_fn_one<warp::filters::header::optional::{{closure}},futures_util::future::ready::Ready<core::result::Result<core::option::Option,warp::reject::Rejection>>>::{{closure}}>,quickwit_serve::format::extract_config_format::{{closure}}>>,warp::filter::untuple_one::UntupleOne<warp::filter::and_then::AndThen<warp::filter::map_err::MapErr<warp::filter::FilterFn<warp::filter::filter_fn_one<warp::filters::header::header2::{{closure}},futures_util::future::ready::Ready<core::result::Result<headers::common::content_length::ContentLength,warp::reject::Rejection>>>::{{closure}}>,warp::filters::body::content_length_limit::{{closure}}>,warp::filters::body::content_length_limit::{{closure}}>>>,warp::filter::and_then::AndThen<warp::filter::FilterFn<warp::filter::filter_fn_one<warp::filters::body::body::{{closure}},futures_util::future::ready::Ready<core::result::Result<hyper::body::body::Body,warp::reject::Rejection>>>::{{closure}}>,warp::filters::body::bytes::{{closure}}>>,warp::filter::map::Map<warp::filters::any::Any,quickwit_serve::with_arg::{{closure}}>>,quickwit_serve::index_api::rest_handler::create_source>,quickwit_serve::index_api::rest_handler::log_failure<quickwit_config::source_config::SourceConfig,quickwit_index_management::index::IndexServiceError>::{{closure}}>,warp::filter::map::Map<warp::filter::and_then::AndThen<warp::filter::or_else::OrElse<warp::filter::FilterFn<warp::filter::filter_fn_one<warp::filters::query::raw::{{closure}},futures_util::future::ready::Ready<core::result::Result<alloc::string::String,warp::reject::Rejection>>>::{{closure}}>,serde_qs::warp::query::{{closure}}>,serde_qs::warp::query::{{closure}}>,quickwit_serve::format::extract_format_from_qs::{{closure}}>>,quickwit_serve::rest_api_response::into_rest_api_response<quickwit_config::source_config::SourceConfig,quickwit_index_management::index::IndexServiceError>>>,warp::filter::map::Map<warp::filter::and::And<warp::filter::then::Then<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filters::any::Any,warp::filters::path::Exact<warp::filters::path::internal::Opaque>>,warp::filter::FilterFn<warp::filters::path::filter_segment<warp::filters::path::param::{{closure}},(alloc::string::String,)>::{{closure}}>>,warp::filters::path::Exact<warp::filters::path::internal::Opaque>>,warp::filter::FilterFn<warp::filters::path::filter_segment<warp::filters::path::param::{{closure}},(alloc::string::String,)>::{{closure}}>>,warp::filter::FilterFn<warp::filters::path::end::{{closure}}>>,warp::filter::FilterFn<warp::filters::method::method_is<warp::filters::method::get::{{closure}}>::{{closure}}>>,warp::filter::map::Map<warp::filters::any::Any,quickwit_serve::with_arg::{{closure}}>>,quickwit_serve::index_api::rest_handler::get_source>,warp::filter::map::Map<warp::filter::and_then::AndThen<warp::filter::or_else::OrElse<warp::filter::FilterFn<warp::filter::filter_fn_one<warp::filters::query::raw::{{closure}},futures_util::future::ready::Ready<core::result::Result<alloc::string::String,warp::reject::Rejection>>>::{{closure}}>,serde_qs::warp::query::{{closure}}>,serde_qs::warp::query::{{closure}}>,quickwit_serve::format::extract_format_from_qs::{{closure}}>>,quickwit_serve::rest_api_response::into_rest_api_response<quickwit_config::source_config::SourceConfig,quickwit_proto::metastore::MetastoreError>>>,warp::filter::map::Map<warp::filter::and::And<warp::filter::then::Then<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filters::any::Any,warp::filters::path::Exact<warp::filters::path::internal::Opaque>>,warp::filter::FilterFn<warp::filters::path::filter_segment<warp::filters::path::param::{{closure}},(alloc::string::String,)>::{{closure}}>>,warp::filters::path::Exact<warp::filters::path::internal::Opaque>>,warp::filter::FilterFn<warp::filters::path::filter_segment<warp::filters::path::param::{{closure}},(alloc::string::String,)>::{{closure}}>>,warp::filter::FilterFn<warp::filters::path::end::{{closure}}>>,warp::filter::FilterFn<warp::filters::method::method_is<warp::filters::method::delete::{{closure}}>::{{closure}}>>,warp::filter::map::Map<warp::filters::any::Any,quickwit_serve::with_arg::{{closure}}>>,quickwit_serve::index_api::rest_handler::delete_source>,warp::filter::map::Map<warp::filter::and_then::AndThen<warp::filter::or_else::OrElse<warp::filter::FilterFn<warp::filter::filter_fn_one<warp::filters::query::raw::{{closure}},futures_util::future::ready::Ready<core::result::Result<alloc::string::String,warp::reject::Rejection>>>::{{closure}}>,serde_qs::warp::query::{{closure}}>,serde_qs::warp::query::{{closure}}>,quickwit_serve::format::extract_format_from_qs::{{closure}}>>,quickwit_serve::rest_api_response::into_rest_api_response<(),quickwit_index_management::index::IndexServiceError>>>>
Yeah boxing would probably help. Can you experiment a little?
Quickwit compile times are pretty long, this could by some part be caused by overly complex warp types. Below is an example of such a type. We probably should break these type chains by boxing them.