summaryrefslogtreecommitdiff
path: root/core/io.rs
diff options
context:
space:
mode:
authorMatt Mastracci <matthew@mastracci.com>2023-04-22 11:48:21 -0600
committerGitHub <noreply@github.com>2023-04-22 11:48:21 -0600
commitbdffcb409fd1e257db280ab73e07cc319711256c (patch)
tree9aca1c1e73f0249bba8b66781b79c358a7a00798 /core/io.rs
parentd137501a639cb315772866f6775fcd9f43e28f5b (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.rs33
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];