Completely abstract sending responses over channels vs. listeners.

This commit is contained in:
Josh Matthews 2015-01-25 11:10:49 -05:00
parent 1644436557
commit 7517aac9e9
4 changed files with 61 additions and 21 deletions

View file

@ -72,8 +72,24 @@ pub trait AsyncResponseListener {
fn response_complete(&self, status: Result<(), String>);
}
pub enum ResponseAction {
HeadersAvailable(Metadata),
DataAvailable(Vec<u8>),
ResponseComplete(Result<(), String>)
}
impl ResponseAction {
pub fn process(self, listener: &AsyncResponseListener) {
match self {
ResponseAction::HeadersAvailable(m) => listener.headers_available(m),
ResponseAction::DataAvailable(d) => listener.data_available(d),
ResponseAction::ResponseComplete(r) => listener.response_complete(r),
}
}
}
pub trait AsyncResponseTarget {
fn get_listener(&self) -> &AsyncResponseListener;
fn invoke_with_listener(&self, action: ResponseAction);
}
pub enum LoadConsumer {
@ -174,7 +190,7 @@ pub enum CookieSource {
pub enum ResponseSenders {
Channel(Sender<LoadResponse>),
Listener(Box<AsyncResponseTarget + Send>),
Listener(Box<AsyncResponseTarget+ Send>),
}
impl ResponseSenders {