1 use std::marker::PhantomData; 2 use std::task::{Context, Poll}; 3 4 use actix_codec::Framed; 5 use actix_service::{Service, ServiceFactory}; 6 use futures_util::future::Ready; 7 8 use crate::error::Error; 9 use crate::h1::Codec; 10 use crate::request::Request; 11 12 pub struct UpgradeHandler<T>(PhantomData<T>); 13 14 impl<T> ServiceFactory for UpgradeHandler<T> { 15 type Config = (); 16 type Request = (Request, Framed<T, Codec>); 17 type Response = (); 18 type Error = Error; 19 type Service = UpgradeHandler<T>; 20 type InitError = Error; 21 type Future = Ready<Result<Self::Service, Self::InitError>>; 22 new_service(&self, _: ()) -> Self::Future23 fn new_service(&self, _: ()) -> Self::Future { 24 unimplemented!() 25 } 26 } 27 28 impl<T> Service for UpgradeHandler<T> { 29 type Request = (Request, Framed<T, Codec>); 30 type Response = (); 31 type Error = Error; 32 type Future = Ready<Result<Self::Response, Self::Error>>; 33 poll_ready(&mut self, _: &mut Context<'_>) -> Poll<Result<(), Self::Error>>34 fn poll_ready(&mut self, _: &mut Context<'_>) -> Poll<Result<(), Self::Error>> { 35 Poll::Ready(Ok(())) 36 } 37 call(&mut self, _: Self::Request) -> Self::Future38 fn call(&mut self, _: Self::Request) -> Self::Future { 39 unimplemented!() 40 } 41 } 42