From bdffcb409fd1e257db280ab73e07cc319711256c Mon Sep 17 00:00:00 2001 From: Matt Mastracci Date: Sat, 22 Apr 2023 11:48:21 -0600 Subject: feat(ext/http): Rework Deno.serve using hyper 1.0-rc3 (#18619) This is a rewrite of the `Deno.serve` API to live on top of hyper 1.0-rc3. The code should be more maintainable long-term, and avoids some of the slower mpsc patterns that made the older code less efficient than it could have been. Missing features: - `upgradeHttp` and `upgradeHttpRaw` (`upgradeWebSocket` is available, however). - Automatic compression is unavailable on responses. --- core/io.rs | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) (limited to 'core/io.rs') diff --git a/core/io.rs b/core/io.rs index 103fe79c1..567d50bd4 100644 --- a/core/io.rs +++ b/core/io.rs @@ -3,6 +3,7 @@ use std::ops::Deref; use std::ops::DerefMut; +use bytes::Buf; use serde_v8::ZeroCopyBuf; /// BufView is a wrapper around an underlying contiguous chunk of bytes. It can @@ -26,11 +27,11 @@ enum BufViewInner { } impl BufView { - fn from_inner(inner: BufViewInner) -> Self { + const fn from_inner(inner: BufViewInner) -> Self { Self { inner, cursor: 0 } } - pub fn empty() -> Self { + pub const fn empty() -> Self { Self::from_inner(BufViewInner::Empty) } @@ -65,6 +66,20 @@ impl BufView { } } +impl Buf for BufView { + fn remaining(&self) -> usize { + self.len() + } + + fn chunk(&self) -> &[u8] { + self.deref() + } + + fn advance(&mut self, cnt: usize) { + self.advance_cursor(cnt) + } +} + impl Deref for BufView { type Target = [u8]; @@ -210,6 +225,20 @@ impl BufMutView { } } +impl Buf for BufMutView { + fn remaining(&self) -> usize { + self.len() + } + + fn chunk(&self) -> &[u8] { + self.deref() + } + + fn advance(&mut self, cnt: usize) { + self.advance_cursor(cnt) + } +} + impl Deref for BufMutView { type Target = [u8]; -- cgit v1.2.3