1
0
mirror of https://github.com/fafhrd91/actix-net synced 2024-11-27 18:02:58 +01:00

prepare actix-service 1.0.6 release (#175)

This commit is contained in:
Rob Ede 2020-08-09 16:10:58 +01:00 committed by GitHub
parent afb0a3c9fc
commit a5a6b6704c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 50 additions and 37 deletions

View File

@ -1,6 +1,9 @@
# Changes # Changes
## Unreleased ## Unreleased - 2020-xx-xx
## 1.0.6 - 2020-08-09
### Fixed ### Fixed

View File

@ -1,12 +1,13 @@
[package] [package]
name = "actix-service" name = "actix-service"
version = "1.0.5" version = "1.0.6"
authors = ["Nikolay Kim <fafhrd91@gmail.com>"] authors = ["Nikolay Kim <fafhrd91@gmail.com>"]
description = "Actix service" description = "Service trait and combinators for representing asynchronous request/response operations."
keywords = ["network", "framework", "async", "futures"] keywords = ["network", "framework", "async", "futures", "service"]
homepage = "https://actix.rs" homepage = "https://actix.rs"
repository = "https://github.com/actix/actix-net.git" repository = "https://github.com/actix/actix-net.git"
documentation = "https://docs.rs/actix-service/" documentation = "https://docs.rs/actix-service"
readme = "actix-service/README.md"
categories = ["network-programming", "asynchronous"] categories = ["network-programming", "asynchronous"]
license = "MIT OR Apache-2.0" license = "MIT OR Apache-2.0"
edition = "2018" edition = "2018"

7
actix-service/README.md Normal file
View File

@ -0,0 +1,7 @@
# actix-service
> Service trait and combinators for representing asynchronous request/response operations.
See documentation for detailed explanations these components: [https://docs.rs/actix-service](docs).
[docs]: https://docs.rs/actix-service

View File

@ -29,7 +29,7 @@ where
/// /// Service that divides two usize values. /// /// Service that divides two usize values.
/// async fn div((x, y): (usize, usize)) -> Result<usize, io::Error> { /// async fn div((x, y): (usize, usize)) -> Result<usize, io::Error> {
/// if y == 0 { /// if y == 0 {
/// Err(io::Error::new(io::ErrorKind::Other, "divide by zdro")) /// Err(io::Error::new(io::ErrorKind::Other, "divide by zero"))
/// } else { /// } else {
/// Ok(x / y) /// Ok(x / y)
/// } /// }

View File

@ -1,3 +1,5 @@
//! See [`Service`](trait.Service.html) docs for information on this crate's foundational trait.
#![deny(rust_2018_idioms, warnings)] #![deny(rust_2018_idioms, warnings)]
#![allow(clippy::type_complexity)] #![allow(clippy::type_complexity)]
@ -29,21 +31,23 @@ pub use self::map_config::{map_config, unit_config};
pub use self::pipeline::{pipeline, pipeline_factory, Pipeline, PipelineFactory}; pub use self::pipeline::{pipeline, pipeline_factory, Pipeline, PipelineFactory};
pub use self::transform::{apply, Transform}; pub use self::transform::{apply, Transform};
/// An asynchronous function from `Request` to a `Response`. /// An asynchronous operation from `Request` to a `Response`.
/// ///
/// `Service` represents a service that represanting interation, taking requests and giving back /// The `Service` trait models a request/response interaction, receiving requests and returning
/// replies. You can think about service as a function with one argument and result as a return /// replies. You can think about a service as a function with one argument that returns some result
/// type. In general form it looks like `async fn(Req) -> Result<Res, Err>`. `Service` /// asynchronously. Conceptually, the operation looks like this:
/// trait just generalizing form of this function. Each parameter described as an assotiated type.
/// ///
/// Services provides a symmetric and uniform API, same abstractions represents /// ```rust,ignore
/// clients and servers. Services describe only `transforamtion` operation /// async fn(Request) -> Result<Response, Err>
/// which encorouge to simplify api surface and phrases `value transformation`. /// ```
/// That leads to simplier design of each service. That also allows better testability
/// and better composition.
/// ///
/// Services could be represented in several different forms. In general, /// The `Service` trait just generalizes this form where each parameter is described as an
/// Service is a type that implements `Service` trait. /// associated type on the trait. Services can also have mutable state that influence computation.
///
/// `Service` provides a symmetric and uniform API; the same abstractions can be used to represent
/// both clients and servers. Services describe only _transformation_ operations which encourage
/// simple API surfaces. This leads to simpler design of each service, improves test-ability and
/// makes composition easier.
/// ///
/// ```rust,ignore /// ```rust,ignore
/// struct MyService; /// struct MyService;
@ -60,8 +64,8 @@ pub use self::transform::{apply, Transform};
/// } /// }
/// ``` /// ```
/// ///
/// Service can have mutable state that influence computation. /// Sometimes it is not necessary to implement the Service trait. For example, the above service
/// This service could be rewritten as a simple function: /// could be rewritten as a simple function and passed to [fn_service](fn.fn_service.html).
/// ///
/// ```rust,ignore /// ```rust,ignore
/// async fn my_service(req: u8) -> Result<u64, MyError>; /// async fn my_service(req: u8) -> Result<u64, MyError>;
@ -89,11 +93,9 @@ pub trait Service {
/// It is permitted for the service to return `Ready` from a `poll_ready` /// It is permitted for the service to return `Ready` from a `poll_ready`
/// call and the next invocation of `call` results in an error. /// call and the next invocation of `call` results in an error.
/// ///
/// There are several notes to consider: /// # Notes
///
/// 1. `.poll_ready()` might be called on different task from actual service call. /// 1. `.poll_ready()` might be called on different task from actual service call.
/// /// 1. In case of chained services, `.poll_ready()` get called for all services at once.
/// 2. In case of chained services, `.poll_ready()` get called for all services at once.
fn poll_ready(&mut self, ctx: &mut task::Context<'_>) -> Poll<Result<(), Self::Error>>; fn poll_ready(&mut self, ctx: &mut task::Context<'_>) -> Poll<Result<(), Self::Error>>;
/// Process the request and return the response asynchronously. /// Process the request and return the response asynchronously.
@ -127,7 +129,7 @@ pub trait Service {
/// Map this service's error to a different error, returning a new service. /// Map this service's error to a different error, returning a new service.
/// ///
/// This function is similar to the `Result::map_err` where it will change /// This function is similar to the `Result::map_err` where it will change
/// the error type of the underlying service. This is useful for example to /// the error type of the underlying service. For example, this can be useful to
/// ensure that services have the same error type. /// ensure that services have the same error type.
/// ///
/// Note that this function consumes the receiving service and returns a /// Note that this function consumes the receiving service and returns a
@ -141,42 +143,42 @@ pub trait Service {
} }
} }
/// Creates new `Service` values. /// Factory for creating `Service`s.
/// ///
/// Acts as a service factory. This is useful for cases where new `Service` /// Acts as a service factory. This is useful for cases where new `Service`s
/// values must be produced. One case is a TCP server listener. The listener /// must be produced. One case is a TCP server listener. The listener
/// accepts new TCP streams, obtains a new `Service` value using the /// accepts new TCP streams, obtains a new `Service` using the
/// `ServiceFactory` trait, and uses that new `Service` value to process inbound /// `ServiceFactory` trait, and uses the new `Service` to process inbound
/// requests on that new TCP stream. /// requests on that new TCP stream.
/// ///
/// `Config` is a service factory configuration type. /// `Config` is a service factory configuration type.
pub trait ServiceFactory { pub trait ServiceFactory {
/// Requests handled by the service. /// Requests handled by the created services.
type Request; type Request;
/// Responses given by the service /// Responses given by the created services.
type Response; type Response;
/// Errors produced by the service /// Errors produced by the created services.
type Error; type Error;
/// Service factory configuration /// Service factory configuration.
type Config; type Config;
/// The `Service` value created by this factory /// The kind of `Service` created by this factory.
type Service: Service< type Service: Service<
Request = Self::Request, Request = Self::Request,
Response = Self::Response, Response = Self::Response,
Error = Self::Error, Error = Self::Error,
>; >;
/// Errors produced while building a service. /// Errors potentially raised while building a service.
type InitError; type InitError;
/// The future of the `Service` instance. /// The future of the `Service` instance.
type Future: Future<Output = Result<Self::Service, Self::InitError>>; type Future: Future<Output = Result<Self::Service, Self::InitError>>;
/// Create and return a new service value asynchronously. /// Create and return a new service asynchronously.
fn new_service(&self, cfg: Self::Config) -> Self::Future; fn new_service(&self, cfg: Self::Config) -> Self::Future;
/// Map this service's output to a different type, returning a new service /// Map this service's output to a different type, returning a new service