38 lines
770 B
Rust
38 lines
770 B
Rust
|
// check-pass
|
||
|
// Related to crater regressions on #118553
|
||
|
|
||
|
pub trait Debug {}
|
||
|
|
||
|
pub trait Service {
|
||
|
type Input;
|
||
|
type Output;
|
||
|
type Error;
|
||
|
}
|
||
|
|
||
|
pub struct ServiceChain<P, S> {
|
||
|
prev: P,
|
||
|
service: S,
|
||
|
}
|
||
|
impl<P: Service, S: Service<Input = P::Output>> Service for ServiceChain<P, S>
|
||
|
where
|
||
|
P::Error: 'static,
|
||
|
S::Error: 'static,
|
||
|
{
|
||
|
type Input = P::Input;
|
||
|
type Output = S::Output;
|
||
|
type Error = ();
|
||
|
}
|
||
|
|
||
|
pub struct ServiceChainBuilder<P: Service, S: Service<Input = P::Output>> {
|
||
|
chain: ServiceChain<P, S>,
|
||
|
}
|
||
|
impl<P: Service, S: Service<Input = P::Output>> ServiceChainBuilder<P, S> {
|
||
|
pub fn next<NS: Service<Input = S::Output>>(
|
||
|
self,
|
||
|
) -> ServiceChainBuilder<ServiceChain<P, S>, NS> {
|
||
|
panic!();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
fn main() {}
|