Scope Config: Use ServiceConfig instead

This commit is contained in:
Denys Vitali 2019-06-02 19:56:17 +02:00
parent 8c2688c1f5
commit 53d254464a
No known key found for this signature in database
GPG Key ID: 8883F38950E654A4
3 changed files with 8 additions and 65 deletions

View File

@ -15,7 +15,6 @@ use crate::service::{
HttpServiceFactory, ServiceFactory, ServiceFactoryWrapper, ServiceRequest,
ServiceResponse,
};
use core::borrow::{Borrow, BorrowMut};
type Guards = Vec<Box<Guard>>;
type HttpNewService =
@ -240,58 +239,6 @@ impl ServiceConfig {
}
}
pub struct ScopeConfig {
pub(crate) services: Vec<Box<ServiceFactory>>,
pub(crate) guards: Vec<Box<Guard>>,
pub(crate) data: Option<Extensions>,
}
impl ScopeConfig {
pub(crate) fn new() -> Self {
Self {
services: Vec::new(),
guards: Vec::new(),
data: Some(Extensions::new()),
}
}
/// Set application data. Application data could be accessed
/// by using `Data<T>` extractor where `T` is data type.
///
/// This is same as `App::data()` method.
pub fn data<S: 'static>(&mut self, data: S) -> &mut Self {
if self.data.is_none() {
self.data = Some(Extensions::new());
}
self.data.as_mut().unwrap().insert(data);
self
}
/// Configure route for a specific path.
///
/// This is same as `App::route()` method.
pub fn route(&mut self, path: &str, mut route: Route) -> &mut Self {
self.service(
Resource::new(path)
.add_guards(route.take_guards())
.route(route),
)
}
/// Register http service.
///
/// This is same as `App::service()` method.
pub fn service<F>(&mut self, factory: F) -> &mut Self
where
F: HttpServiceFactory + 'static,
{
self.services
.push(Box::new(ServiceFactoryWrapper::new(factory)));
self
}
}
#[cfg(test)]
mod tests {
use actix_service::Service;

View File

@ -21,7 +21,7 @@ use crate::route::Route;
use crate::service::{
ServiceFactory, ServiceFactoryWrapper, ServiceRequest, ServiceResponse,
};
use crate::config::ScopeConfig;
use crate::config::ServiceConfig;
type Guards = Vec<Box<Guard>>;
type HttpService = BoxedService<ServiceRequest, ServiceResponse, Error>;
@ -117,25 +117,22 @@ impl Scope {
/// ```
pub fn configure<F>(mut self, f: F) -> Self
where
F: FnOnce(&mut ScopeConfig),
F: FnOnce(&mut ServiceConfig),
{
let mut cfg = ScopeConfig::new();
let mut cfg = ServiceConfig::new();
f(&mut cfg);
self.services.extend(cfg.services);
self.guards.extend(cfg.guards);
//self.data.extend(cfg.data);
if cfg.data.is_some() {
if !cfg.data.is_empty() {
if (&self).data.is_some() {
let mut new_data = Extensions::from(cfg.data.unwrap());
let mut data = self.data.unwrap();
let old_data = Extensions::from(self.data.take().unwrap());
for value in old_data.into_iter() {
new_data.insert(value);
for value in cfg.data.iter() {
value.create(&mut data);
}
self.data = Some(new_data);
self.data = Some(data);
}
}
self

View File

@ -14,7 +14,6 @@ use crate::route::Route;
use crate::scope::Scope;
use crate::service::WebService;
pub use crate::config::ScopeConfig;
pub use crate::config::ServiceConfig;
pub use crate::data::Data;
pub use crate::request::HttpRequest;