use std::marker::PhantomData; use std::task::{Context, Poll}; use actix_codec::Framed; use actix_service::{Service, ServiceFactory}; use futures_util::future::{ready, Ready}; use crate::error::Error; use crate::h1::Codec; use crate::request::Request; pub struct UpgradeHandler(pub(crate) PhantomData); impl ServiceFactory for UpgradeHandler { type Config = (); type Request = (Request, Framed); type Response = (); type Error = Error; type Service = UpgradeHandler; type InitError = Error; type Future = Ready>; fn new_service(&self, _: ()) -> Self::Future { unimplemented!() } } impl Service for UpgradeHandler { type Request = (Request, Framed); type Response = (); type Error = Error; type Future = Ready>; fn poll_ready(&mut self, _: &mut Context<'_>) -> Poll> { Poll::Ready(Ok(())) } fn call(&mut self, _: Self::Request) -> Self::Future { ready(Ok(())) } }