1
0
mirror of https://github.com/fafhrd91/actix-net synced 2025-08-15 02:10:41 +02:00

Compare commits

...

3 Commits

Author SHA1 Message Date
Rob Ede
a09f9abfcb prepare utils release 3.0.0-beta.1 2020-12-28 03:32:28 +00:00
Rob Ede
e4a44b77e6 prepare codec release 0.4.0-beta.1 2020-12-28 03:24:43 +00:00
fakeshadow
2ee8f45f5d update actix-codec and actix-utils to tokio 1.0 (#237) 2020-12-28 03:16:37 +00:00
11 changed files with 147 additions and 204 deletions

View File

@@ -16,16 +16,16 @@ members = [
] ]
[patch.crates-io] [patch.crates-io]
actix-codec = { path = "actix-codec" } actix-codec = { git = "https://github.com/actix/actix-net.git", rev = "ba44ea7d0bafaf5fccb9a34003d503e1910943ee" }
actix-connect = { path = "actix-connect" } actix-connect = { path = "actix-connect" }
actix-rt = { git = "https://github.com/actix/actix-net.git", rev = "ba44ea7d0bafaf5fccb9a34003d503e1910943ee" } actix-rt = { git = "https://github.com/actix/actix-net.git", rev = "ba44ea7d0bafaf5fccb9a34003d503e1910943ee" }
actix-macros = { path = "actix-macros" } actix-macros = { path = "actix-macros" }
actix-server = { path = "actix-server" } actix-server = { path = "actix-server" }
actix-service = { path = "actix-service" } actix-service = { git = "https://github.com/actix/actix-net.git", rev = "ba44ea7d0bafaf5fccb9a34003d503e1910943ee" }
actix-testing = { path = "actix-testing" } actix-testing = { path = "actix-testing" }
actix-threadpool = { path = "actix-threadpool" } actix-threadpool = { path = "actix-threadpool" }
actix-tls = { path = "actix-tls" } actix-tls = { path = "actix-tls" }
actix-tracing = { path = "actix-tracing" } actix-tracing = { path = "actix-tracing" }
actix-utils = { path = "actix-utils" } actix-utils = { git = "https://github.com/actix/actix-net.git", rev = "ba44ea7d0bafaf5fccb9a34003d503e1910943ee" }
actix-router = { path = "router" } actix-router = { path = "router" }
bytestring = { path = "string" } bytestring = { path = "string" }

View File

@@ -1,14 +1,25 @@
# Changes # Changes
## Unreleased - 2020-xx-xx ## Unreleased - 2020-xx-xx
* Upgrade `pin-project` to `1.0`.
## 0.4.0-beta.1 - 2020-12-28
* Replace `pin-project` with `pin-project-lite`. [#237]
* Upgrade `tokio` dependency to `1`. [#237]
* Upgrade `tokio-util` dependency to `0.6`. [#237]
* Upgrade `bytes` dependency to `1`. [#237]
[#237]: https://github.com/actix/actix-net/pull/237
## 0.3.0 - 2020-08-23 ## 0.3.0 - 2020-08-23
* No changes from beta 2. * No changes from beta 2.
## 0.3.0-beta.2 - 2020-08-19 ## 0.3.0-beta.2 - 2020-08-19
* Remove unused type parameter from `Framed::replace_codec`. * Remove unused type parameter from `Framed::replace_codec`.
## 0.3.0-beta.1 - 2020-08-19 ## 0.3.0-beta.1 - 2020-08-19
* Use `.advance()` instead of `.split_to()`. * Use `.advance()` instead of `.split_to()`.
* Upgrade `tokio-util` to `0.3`. * Upgrade `tokio-util` to `0.3`.
@@ -18,32 +29,31 @@
* Add method on `Framed` to get a pinned reference to the underlying I/O. * Add method on `Framed` to get a pinned reference to the underlying I/O.
* Add method on `Framed` check emptiness of read buffer. * Add method on `Framed` check emptiness of read buffer.
## [0.2.0] - 2019-12-10
## 0.2.0 - 2019-12-10
* Use specific futures dependencies * Use specific futures dependencies
## [0.2.0-alpha.4]
## 0.2.0-alpha.4
* Fix buffer remaining capacity calculation * Fix buffer remaining capacity calculation
## [0.2.0-alpha.3]
## 0.2.0-alpha.3
* Use tokio 0.2 * Use tokio 0.2
* Fix low/high watermark for write/read buffers * Fix low/high watermark for write/read buffers
## [0.2.0-alpha.2]
## 0.2.0-alpha.2
* Migrated to `std::future` * Migrated to `std::future`
## [0.1.2] - 2019-03-27
## 0.1.2 - 2019-03-27
* Added `Framed::map_io()` method. * Added `Framed::map_io()` method.
## [0.1.1] - 2019-03-06
## 0.1.1 - 2019-03-06
* Added `FramedParts::with_read_buffer()` method. * Added `FramedParts::with_read_buffer()` method.
## [0.1.0] - 2018-12-09
## 0.1.0 - 2018-12-09
* Move codec to separate crate * Move codec to separate crate

View File

@@ -1,8 +1,8 @@
[package] [package]
name = "actix-codec" name = "actix-codec"
version = "0.3.0" version = "0.4.0-beta.1"
authors = ["Nikolay Kim <fafhrd91@gmail.com>"] authors = ["Nikolay Kim <fafhrd91@gmail.com>"]
description = "Codec utilities for working with framed protocols." description = "Codec utilities for working with framed protocols"
keywords = ["network", "framework", "async", "futures"] keywords = ["network", "framework", "async", "futures"]
homepage = "https://actix.rs" homepage = "https://actix.rs"
repository = "https://github.com/actix/actix-net.git" repository = "https://github.com/actix/actix-net.git"
@@ -17,10 +17,10 @@ path = "src/lib.rs"
[dependencies] [dependencies]
bitflags = "1.2.1" bitflags = "1.2.1"
bytes = "0.5.2" bytes = "1"
futures-core = { version = "0.3.4", default-features = false } futures-core = { version = "0.3.7", default-features = false }
futures-sink = { version = "0.3.4", default-features = false } futures-sink = { version = "0.3.7", default-features = false }
log = "0.4" log = "0.4"
pin-project = "1.0.0" pin-project-lite = "0.2"
tokio = { version = "0.2.5", default-features = false } tokio = "1"
tokio-util = { version = "0.3.1", default-features = false, features = ["codec"] } tokio-util = { version = "0.6", features = ["codec", "io"] }

View File

@@ -14,7 +14,7 @@ impl Encoder<Bytes> for BytesCodec {
#[inline] #[inline]
fn encode(&mut self, item: Bytes, dst: &mut BytesMut) -> Result<(), Self::Error> { fn encode(&mut self, item: Bytes, dst: &mut BytesMut) -> Result<(), Self::Error> {
dst.extend_from_slice(item.bytes()); dst.extend_from_slice(item.chunk());
Ok(()) Ok(())
} }
} }

View File

@@ -5,7 +5,6 @@ use std::{fmt, io};
use bytes::{Buf, BytesMut}; use bytes::{Buf, BytesMut};
use futures_core::{ready, Stream}; use futures_core::{ready, Stream};
use futures_sink::Sink; use futures_sink::Sink;
use pin_project::pin_project;
use crate::{AsyncRead, AsyncWrite, Decoder, Encoder}; use crate::{AsyncRead, AsyncWrite, Decoder, Encoder};
@@ -21,22 +20,23 @@ bitflags::bitflags! {
} }
} }
/// A unified `Stream` and `Sink` interface to an underlying I/O object, using pin_project_lite::pin_project! {
/// the `Encoder` and `Decoder` traits to encode and decode frames. /// A unified `Stream` and `Sink` interface to an underlying I/O object, using
/// /// the `Encoder` and `Decoder` traits to encode and decode frames.
/// Raw I/O objects work with byte sequences, but higher-level code usually ///
/// wants to batch these into meaningful chunks, called "frames". This /// Raw I/O objects work with byte sequences, but higher-level code usually
/// method layers framing on top of an I/O object, by using the `Encoder`/`Decoder` /// wants to batch these into meaningful chunks, called "frames". This
/// traits to handle encoding and decoding of message frames. Note that /// method layers framing on top of an I/O object, by using the `Encoder`/`Decoder`
/// the incoming and outgoing frame types may be distinct. /// traits to handle encoding and decoding of message frames. Note that
#[pin_project] /// the incoming and outgoing frame types may be distinct.
pub struct Framed<T, U> { pub struct Framed<T, U> {
#[pin] #[pin]
io: T, io: T,
codec: U, codec: U,
flags: Flags, flags: Flags,
read_buf: BytesMut, read_buf: BytesMut,
write_buf: BytesMut, write_buf: BytesMut,
}
} }
impl<T, U> Framed<T, U> impl<T, U> Framed<T, U>
@@ -220,7 +220,8 @@ impl<T, U> Framed<T, U> {
if remaining < LW { if remaining < LW {
this.read_buf.reserve(HW - remaining) this.read_buf.reserve(HW - remaining)
} }
let cnt = match this.io.poll_read_buf(cx, &mut this.read_buf) {
let cnt = match tokio_util::io::poll_read_buf(this.io, cx, this.read_buf) {
Poll::Pending => return Poll::Pending, Poll::Pending => return Poll::Pending,
Poll::Ready(Err(e)) => return Poll::Ready(Some(Err(e.into()))), Poll::Ready(Err(e)) => return Poll::Ready(Some(Err(e.into()))),
Poll::Ready(Ok(cnt)) => cnt, Poll::Ready(Ok(cnt)) => cnt,

View File

@@ -1,4 +1,4 @@
//! Utilities for encoding and decoding frames. //! Codec utilities for working with framed protocols.
//! //!
//! Contains adapters to go from streams of bytes, [`AsyncRead`] and //! Contains adapters to go from streams of bytes, [`AsyncRead`] and
//! [`AsyncWrite`], to framed streams implementing [`Sink`] and [`Stream`]. //! [`AsyncWrite`], to framed streams implementing [`Sink`] and [`Stream`].
@@ -18,5 +18,6 @@ mod framed;
pub use self::bcodec::BytesCodec; pub use self::bcodec::BytesCodec;
pub use self::framed::{Framed, FramedParts}; pub use self::framed::{Framed, FramedParts};
pub use tokio::io::{AsyncRead, AsyncWrite}; pub use tokio::io::{AsyncRead, AsyncWrite, ReadBuf};
pub use tokio_util::codec::{Decoder, Encoder}; pub use tokio_util::codec::{Decoder, Encoder};
pub use tokio_util::io::poll_read_buf;

View File

@@ -1,226 +1,156 @@
# Changes # Changes
## Unreleased - 2020-xx-xx ## Unreleased - 2020-xx-xx
## 3.0.0-beta.1 - 2020-12-28
* Update `bytes` dependency to `1`. [#237]
* Use `pin-project-lite` to replace `pin-project`. [#229] * Use `pin-project-lite` to replace `pin-project`. [#229]
* Remove `condition`,`either`,`inflight`,`keepalive`,`oneshot`,`order`,`stream` and `time` mods. [#229] * Remove `condition`,`either`,`inflight`,`keepalive`,`oneshot`,`order`,`stream` and `time` mods. [#229]
[#229]: https://github.com/actix/actix-net/pull/229 [#229]: https://github.com/actix/actix-net/pull/229
[#237]: https://github.com/actix/actix-net/pull/237
## 2.0.0 - 2020-08-23 ## 2.0.0 - 2020-08-23
* No changes from beta 1. * No changes from beta 1.
## 2.0.0-beta.1 - 2020-08-19 ## 2.0.0-beta.1 - 2020-08-19
* Upgrade `tokio-util` to `0.3`. * Upgrade `tokio-util` to `0.3`.
* Remove unsound custom Cell and use `std::cell::RefCell` instead, as well as `actix-service`. * Remove unsound custom Cell and use `std::cell::RefCell` instead, as well as `actix-service`.
* Rename method to correctly spelled `LocalWaker::is_registered`. * Rename method to correctly spelled `LocalWaker::is_registered`.
## [1.0.6] - 2020-01-08
* Add `Clone` impl for `condition::Waiter` ## 1.0.6 - 2020-01-08
* Add `Clone` impl for `condition::Waiter`.
## [1.0.5] - 2020-01-08
## 1.0.5 - 2020-01-08
* Add `Condition` type. * Add `Condition` type.
* Add `Pool` of one-shot's. * Add `Pool` of one-shot's.
## [1.0.4] - 2019-12-20
## 1.0.4 - 2019-12-20
* Add methods to check `LocalWaker` registration state. * Add methods to check `LocalWaker` registration state.
## [1.0.3] - 2019-12-11
## 1.0.3 - 2019-12-11
* Revert InOrder service changes * Revert InOrder service changes
## [1.0.2] - 2019-12-11
* Allow to create `framed::Dispatcher` with custom `mpsc::Receiver` ## 1.0.2 - 2019-12-11
* Allow to create `framed::Dispatcher` with custom `mpsc::Receiver`.
* Add `oneshot::Sender::is_canceled()` method.
* Add `oneshot::Sender::is_canceled()` method
## [1.0.1] - 2019-12-11 ## 1.0.1 - 2019-12-11
* Optimize InOrder service.
* Optimize InOrder service
## [1.0.0] - 2019-12-11 ## 1.0.0 - 2019-12-11
* Simplify oneshot and mpsc implementations.
* Simplify oneshot and mpsc implementations
## [1.0.0-alpha.3] - 2019-12-07 ## 1.0.0-alpha.3 - 2019-12-07
* Migrate to tokio 0.2.
* Fix oneshot.
* Migrate to tokio 0.2
* Fix oneshot ## 1.0.0-alpha.2 - 2019-12-02
* Migrate to `std::future`.
## [1.0.0-alpha.2] - 2019-12-02
* Migrate to `std::future`
## [0.4.7] - 2019-10-14
## 0.4.7 - 2019-10-14
* Re-register task on every framed transport poll. * Re-register task on every framed transport poll.
## [0.4.6] - 2019-10-08 ## 0.4.6 - 2019-10-08
* Refactor `Counter` type. register current task in available method. * Refactor `Counter` type. register current task in available method.
## [0.4.5] - 2019-07-19 ## 0.4.5 - 2019-07-19
* Deprecated `CloneableService` as it is not safe.
### Removed
* Deprecated `CloneableService` as it is not safe
## [0.4.4] - 2019-07-17 ## 0.4.4 - 2019-07-17
* Undeprecate `FramedTransport` as it is actually useful.
### Changed
* Undeprecate `FramedTransport` as it is actually useful
## [0.4.3] - 2019-07-17 ## 0.4.3 - 2019-07-17
* Deprecate `CloneableService` as it is not safe and in general not very useful.
### Deprecated * Deprecate `FramedTransport` in favor of `actix-ioframe`.
* Deprecate `CloneableService` as it is not safe and in general not very useful
* Deprecate `FramedTransport` in favor of `actix-ioframe`
## [0.4.2] - 2019-06-26 ## 0.4.2 - 2019-06-26
* Do not block on sink drop for FramedTransport.
### Fixed
* Do not block on sink drop for FramedTransport
## [0.4.1] - 2019-05-15 ## 0.4.1 - 2019-05-15
* Change `Either` constructor.
### Changed
* Change `Either` constructor
## [0.4.0] - 2019-05-11 ## 0.4.0 - 2019-05-11
* Change `Either` to handle two nexted services.
* Upgrade actix-service 0.4.
* Removed framed related services.
* Removed stream related services.
### Changed
* Change `Either` to handle two nexted services
* Upgrade actix-service 0.4
### Deleted
* Framed related services
* Stream related services
## [0.3.5] - 2019-04-04
### Added
## 0.3.5 - 2019-04-04
* Allow to send messages to `FramedTransport` via mpsc channel. * Allow to send messages to `FramedTransport` via mpsc channel.
* Remove `'static` constraint from Clonable service.
### Changed
* Remove 'static constraint from Clonable service
## [0.3.4] - 2019-03-12 ## 0.3.4 - 2019-03-12
### Changed
* `TimeoutService`, `InOrderService`, `InFlightService` accepts generic IntoService services. * `TimeoutService`, `InOrderService`, `InFlightService` accepts generic IntoService services.
* Fix `InFlightService::poll_ready()` nested service readiness check.
### Fixed * Fix `InOrderService::poll_ready()` nested service readiness check.
* Fix `InFlightService::poll_ready()` nested service readiness check
* Fix `InOrderService::poll_ready()` nested service readiness check
## [0.3.3] - 2019-03-09 ## 0.3.3 - 2019-03-09
* Revert IntoFuture change.
### Changed * Add generic config param for IntoFramed and TakeOne new services.
* Revert IntoFuture change
* Add generic config param for IntoFramed and TakeOne new services
## [0.3.2] - 2019-03-04 ## 0.3.2 - 2019-03-04
* Use IntoFuture for new services.
### Changed ## 0.3.1 - 2019-03-04
* Use new type of transform trait.
* Use IntoFuture for new services
## [0.3.1] - 2019-03-04 ## 0.3.0 - 2019-03-02
### Changed
* Use new type of transform trait
## [0.3.0] - 2019-03-02
### Changed
* Use new `NewService` trait * Use new `NewService` trait
* BoxedNewService` and `BoxedService` types moved to actix-service crate. * BoxedNewService` and `BoxedService` types moved to actix-service crate.
## [0.2.4] - 2019-02-21 ## 0.2.4 - 2019-02-21
### Changed
* Custom `BoxedNewService` implementation. * Custom `BoxedNewService` implementation.
## [0.2.3] - 2019-02-21 ## 0.2.3 - 2019-02-21
* Add `BoxedNewService` and `BoxedService`.
### Added
* Add `BoxedNewService` and `BoxedService`
## [0.2.2] - 2019-02-11 ## 0.2.2 - 2019-02-11
* Add `Display` impl for `TimeoutError`.
### Added * Add `Display` impl for `InOrderError`.
* Add `Display` impl for `TimeoutError`
* Add `Display` impl for `InOrderError`
## [0.2.1] - 2019-02-06 ## 0.2.1 - 2019-02-06
### Added
* Add `InOrder` service. the service yields responses as they become available, * Add `InOrder` service. the service yields responses as they become available,
in the order that their originating requests were submitted to the service. in the order that their originating requests were submitted to the service.
* Convert `Timeout` and `InFlight` services to a transforms.
### Changed
* Convert `Timeout` and `InFlight` services to a transforms
## [0.2.0] - 2019-02-01 ## 0.2.0 - 2019-02-01
* Fix framed transport error handling.
* Fix framed transport error handling * Added Clone impl for Either service.
* Added Clone impl for Timeout service factory.
* Added Clone impl for Either service * Added Service and NewService for Stream dispatcher.
* Switch to actix-service 0.2.
* Added Clone impl for Timeout service factory
* Added Service and NewService for Stream dispatcher
* Switch to actix-service 0.2
## [0.1.0] - 2018-12-09 ## 0.1.0 - 2018-12-09
* Move utils services to separate crate.
* Move utils services to separate crate

View File

@@ -1,8 +1,8 @@
[package] [package]
name = "actix-utils" name = "actix-utils"
version = "2.0.0" version = "3.0.0-beta.1"
authors = ["Nikolay Kim <fafhrd91@gmail.com>"] authors = ["Nikolay Kim <fafhrd91@gmail.com>"]
description = "Various network related services and utilities for the Actix ecosystem." description = "Various network related services and utilities for the Actix ecosystem"
keywords = ["network", "framework", "async", "futures"] keywords = ["network", "framework", "async", "futures"]
homepage = "https://actix.rs" homepage = "https://actix.rs"
repository = "https://github.com/actix/actix-net.git" repository = "https://github.com/actix/actix-net.git"
@@ -16,9 +16,9 @@ name = "actix_utils"
path = "src/lib.rs" path = "src/lib.rs"
[dependencies] [dependencies]
actix-codec = "0.3.0" actix-codec = "0.4.0-beta.1"
actix-rt = "1.1.1" actix-rt = "2.0.0-beta.1"
actix-service = "1.0.6" actix-service = "2.0.0-beta.1"
futures-core = { version = "0.3.7", default-features = false } futures-core = { version = "0.3.7", default-features = false }
futures-sink = { version = "0.3.7", default-features = false } futures-sink = { version = "0.3.7", default-features = false }

View File

@@ -1,4 +1,4 @@
//! Actix utils - various helper services //! Various network related services and utilities for the Actix ecosystem.
#![deny(rust_2018_idioms, nonstandard_style)] #![deny(rust_2018_idioms, nonstandard_style)]
#![allow(clippy::type_complexity)] #![allow(clippy::type_complexity)]

View File

@@ -1,4 +1,5 @@
//! A multi-producer, single-consumer, futures-aware, FIFO queue. //! A multi-producer, single-consumer, futures-aware, FIFO queue.
use core::any::Any; use core::any::Any;
use core::cell::RefCell; use core::cell::RefCell;
use core::fmt; use core::fmt;

View File

@@ -1,7 +1,6 @@
//! Service that applies a timeout to requests. //! Service that applies a timeout to requests.
//! //!
//! If the response does not complete within the specified timeout, the response //! If the response does not complete within the specified timeout, the response will be aborted.
//! will be aborted.
use core::future::Future; use core::future::Future;
use core::marker::PhantomData; use core::marker::PhantomData;
@@ -9,7 +8,7 @@ use core::pin::Pin;
use core::task::{Context, Poll}; use core::task::{Context, Poll};
use core::{fmt, time}; use core::{fmt, time};
use actix_rt::time::{delay_for, Delay}; use actix_rt::time::{sleep, Sleep};
use actix_service::{IntoService, Service, Transform}; use actix_service::{IntoService, Service, Transform};
use pin_project_lite::pin_project; use pin_project_lite::pin_project;
@@ -85,8 +84,8 @@ where
{ {
type Response = S::Response; type Response = S::Response;
type Error = TimeoutError<S::Error>; type Error = TimeoutError<S::Error>;
type InitError = E;
type Transform = TimeoutService<S, Req>; type Transform = TimeoutService<S, Req>;
type InitError = E;
type Future = TimeoutFuture<Self::Transform, Self::InitError>; type Future = TimeoutFuture<Self::Transform, Self::InitError>;
fn new_transform(&self, service: S) -> Self::Future { fn new_transform(&self, service: S) -> Self::Future {
@@ -157,7 +156,7 @@ where
fn call(&mut self, request: Req) -> Self::Future { fn call(&mut self, request: Req) -> Self::Future {
TimeoutServiceResponse { TimeoutServiceResponse {
fut: self.service.call(request), fut: self.service.call(request),
sleep: delay_for(self.timeout), sleep: sleep(self.timeout),
} }
} }
} }
@@ -171,7 +170,8 @@ pin_project! {
{ {
#[pin] #[pin]
fut: S::Future, fut: S::Future,
sleep: Delay, #[pin]
sleep: Sleep,
} }
} }
@@ -193,20 +193,18 @@ where
} }
// Now check the sleep // Now check the sleep
Pin::new(this.sleep) this.sleep.poll(cx).map(|_| Err(TimeoutError::Timeout))
.poll(cx)
.map(|_| Err(TimeoutError::Timeout))
} }
} }
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use std::task::Poll; use core::task::Poll;
use std::time::Duration; use core::time::Duration;
use super::*; use super::*;
use actix_service::{apply, fn_factory, Service, ServiceFactory}; use actix_service::{apply, fn_factory, Service, ServiceFactory};
use futures_util::future::{ok, FutureExt, LocalBoxFuture}; use futures_core::future::LocalBoxFuture;
struct SleepService(Duration); struct SleepService(Duration);
@@ -218,9 +216,11 @@ mod tests {
actix_service::always_ready!(); actix_service::always_ready!();
fn call(&mut self, _: ()) -> Self::Future { fn call(&mut self, _: ()) -> Self::Future {
actix_rt::time::delay_for(self.0) let sleep = actix_rt::time::sleep(self.0);
.then(|_| ok::<_, ()>(())) Box::pin(async move {
.boxed_local() sleep.await;
Ok(())
})
} }
} }
@@ -249,7 +249,7 @@ mod tests {
let timeout = apply( let timeout = apply(
Timeout::new(resolution), Timeout::new(resolution),
fn_factory(|| ok::<_, ()>(SleepService(wait_time))), fn_factory(|| async { Ok::<_, ()>(SleepService(wait_time)) }),
); );
let mut srv = timeout.new_service(&()).await.unwrap(); let mut srv = timeout.new_service(&()).await.unwrap();