diff options
author | Matt Mastracci <matthew@mastracci.com> | 2023-04-22 11:48:21 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-22 11:48:21 -0600 |
commit | bdffcb409fd1e257db280ab73e07cc319711256c (patch) | |
tree | 9aca1c1e73f0249bba8b66781b79c358a7a00798 /core/io.rs | |
parent | d137501a639cb315772866f6775fcd9f43e28f5b (diff) |
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.
Diffstat (limited to 'core/io.rs')
-rw-r--r-- | core/io.rs | 33 |
1 files changed, 31 insertions, 2 deletions
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]; |