This commit is contained in:
Nikolay Kim 2021-12-24 03:54:57 +06:00
parent f0f899a36e
commit 15025b89c1
14 changed files with 34 additions and 82 deletions

View file

@ -1,8 +1,7 @@
use core::fmt; use core::fmt;
use core::mem::MaybeUninit; use core::mem::MaybeUninit;
use core::ops::{ use core::ops::{
Index, IndexMut, Range, RangeFrom, RangeFull, RangeInclusive, RangeTo, Index, IndexMut, Range, RangeFrom, RangeFull, RangeInclusive, RangeTo, RangeToInclusive,
RangeToInclusive,
}; };
/// Uninitialized byte slice. /// Uninitialized byte slice.
@ -42,10 +41,7 @@ impl UninitSlice {
/// let slice = unsafe { UninitSlice::from_raw_parts_mut(ptr, len) }; /// let slice = unsafe { UninitSlice::from_raw_parts_mut(ptr, len) };
/// ``` /// ```
#[inline] #[inline]
pub unsafe fn from_raw_parts_mut<'a>( pub unsafe fn from_raw_parts_mut<'a>(ptr: *mut u8, len: usize) -> &'a mut UninitSlice {
ptr: *mut u8,
len: usize,
) -> &'a mut UninitSlice {
let maybe_init: &mut [MaybeUninit<u8>] = let maybe_init: &mut [MaybeUninit<u8>] =
core::slice::from_raw_parts_mut(ptr as *mut _, len); core::slice::from_raw_parts_mut(ptr as *mut _, len);
&mut *(maybe_init as *mut [MaybeUninit<u8>] as *mut UninitSlice) &mut *(maybe_init as *mut [MaybeUninit<u8>] as *mut UninitSlice)

View file

@ -466,8 +466,7 @@ impl Bytes {
} }
} else { } else {
Bytes { Bytes {
inner: BytesMut::copy_from_slice_in(data, PoolId::DEFAULT.pool_ref()) inner: BytesMut::copy_from_slice_in(data, PoolId::DEFAULT.pool_ref()).inner,
.inner,
} }
} }
} }
@ -717,8 +716,7 @@ impl Bytes {
} }
} else { } else {
Bytes { Bytes {
inner: BytesMut::copy_from_slice_in_priv(self, self.inner.pool()) inner: BytesMut::copy_from_slice_in_priv(self, self.inner.pool()).inner,
.inner,
} }
}; };
} }
@ -2369,8 +2367,7 @@ impl Inner {
let new_cap = len + additional; let new_cap = len + additional;
// Promote to a vector // Promote to a vector
*self = *self = Inner::from_slice(new_cap, self.as_ref(), PoolId::DEFAULT.pool_ref());
Inner::from_slice(new_cap, self.as_ref(), PoolId::DEFAULT.pool_ref());
return; return;
} }

View file

@ -26,9 +26,7 @@ fn test_size() {
assert_eq!(32, std::mem::size_of::<Option<Bytes>>()); assert_eq!(32, std::mem::size_of::<Option<Bytes>>());
let mut t = BytesMut::new(); let mut t = BytesMut::new();
t.extend_from_slice( t.extend_from_slice(&b"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"[..]);
&b"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"[..],
);
let val = t.freeze(); let val = t.freeze();
assert!(val.is_inline()); assert!(val.is_inline());

View file

@ -2,8 +2,8 @@ use futures::{future, Future};
use ntex::http::{Method, StatusCode}; use ntex::http::{Method, StatusCode};
use ntex::web::{test, types::Path, App, Error, HttpResponse, HttpResponseBuilder}; use ntex::web::{test, types::Path, App, Error, HttpResponse, HttpResponseBuilder};
use ntex_macros::{ use ntex_macros::{
web_connect, web_delete, web_get, web_head, web_options, web_patch, web_post, web_connect, web_delete, web_get, web_head, web_options, web_patch, web_post, web_put,
web_put, web_trace, web_trace,
}; };
// Make sure that we can name function as 'config' // Make sure that we can name function as 'config'

View file

@ -26,11 +26,8 @@ macro_rules! parse_single_value {
{ {
if self.path.len() != 1 { if self.path.len() != 1 {
Err(de::value::Error::custom( Err(de::value::Error::custom(
format!( format!("wrong number of parameters: {} expected 1", self.path.len())
"wrong number of parameters: {} expected 1", .as_str(),
self.path.len()
)
.as_str(),
)) ))
} else { } else {
let v = self.path[0].parse().map_err(|_| { let v = self.path[0].parse().map_err(|_| {
@ -109,11 +106,7 @@ impl<'de, T: ResourcePath + 'de> Deserializer<'de> for PathDeserializer<'de, T>
visitor.visit_newtype_struct(self) visitor.visit_newtype_struct(self)
} }
fn deserialize_tuple<V>( fn deserialize_tuple<V>(self, len: usize, visitor: V) -> Result<V::Value, Self::Error>
self,
len: usize,
visitor: V,
) -> Result<V::Value, Self::Error>
where where
V: Visitor<'de>, V: Visitor<'de>,
{ {
@ -562,8 +555,7 @@ mod tests {
assert_eq!(s.0, "name"); assert_eq!(s.0, "name");
assert_eq!(s.1, "user1"); assert_eq!(s.1, "user1");
let s: &str = let s: &str = de::Deserialize::deserialize(PathDeserializer::new(&path)).unwrap();
de::Deserialize::deserialize(PathDeserializer::new(&path)).unwrap();
assert_eq!(s, "name"); assert_eq!(s, "name");
let mut path = Path::new("/name/user1/"); let mut path = Path::new("/name/user1/");
@ -572,8 +564,7 @@ mod tests {
("value", PathItem::Static("32")), ("value", PathItem::Static("32")),
]; ];
let s: Test1 = let s: Test1 = de::Deserialize::deserialize(PathDeserializer::new(&path)).unwrap();
de::Deserialize::deserialize(PathDeserializer::new(&path)).unwrap();
assert_eq!(s.0, "name"); assert_eq!(s.0, "name");
assert_eq!(s.1, 32); assert_eq!(s.1, 32);
@ -583,8 +574,7 @@ mod tests {
assert_eq!((s.0).0, "name"); assert_eq!((s.0).0, "name");
assert_eq!((s.0).1, 32); assert_eq!((s.0).1, 32);
let s: Test2 = let s: Test2 = de::Deserialize::deserialize(PathDeserializer::new(&path)).unwrap();
de::Deserialize::deserialize(PathDeserializer::new(&path)).unwrap();
assert_eq!(s.key, "name"); assert_eq!(s.key, "name");
assert_eq!(s.value, 32); assert_eq!(s.value, 32);
@ -624,8 +614,7 @@ mod tests {
let i: i8 = de::Deserialize::deserialize(PathDeserializer::new(&path)).unwrap(); let i: i8 = de::Deserialize::deserialize(PathDeserializer::new(&path)).unwrap();
assert_eq!(i, 32); assert_eq!(i, 32);
let i: (i8,) = let i: (i8,) = de::Deserialize::deserialize(PathDeserializer::new(&path)).unwrap();
de::Deserialize::deserialize(PathDeserializer::new(&path)).unwrap();
assert_eq!(i, (32,)); assert_eq!(i, (32,));
let i: Result<(i8, i8), _> = let i: Result<(i8, i8), _> =
@ -634,13 +623,11 @@ mod tests {
#[derive(Deserialize)] #[derive(Deserialize)]
struct Test(i8); struct Test(i8);
let i: Test = let i: Test = de::Deserialize::deserialize(PathDeserializer::new(&path)).unwrap();
de::Deserialize::deserialize(PathDeserializer::new(&path)).unwrap();
assert_eq!(i.0, 32); assert_eq!(i.0, 32);
path.segments.push(("value2", PathItem::Static("32"))); path.segments.push(("value2", PathItem::Static("32")));
let i: Result<i8, _> = let i: Result<i8, _> = de::Deserialize::deserialize(PathDeserializer::new(&path));
de::Deserialize::deserialize(PathDeserializer::new(&path));
assert!(i.is_err()); assert!(i.is_err());
} }
@ -666,8 +653,7 @@ mod tests {
fn test_extract_enum_value() { fn test_extract_enum_value() {
let mut path = Path::new("/val1/"); let mut path = Path::new("/val1/");
path.segments = vec![("val", PathItem::Static("val1"))]; path.segments = vec![("val", PathItem::Static("val1"))];
let i: Test3 = let i: Test3 = de::Deserialize::deserialize(PathDeserializer::new(&path)).unwrap();
de::Deserialize::deserialize(PathDeserializer::new(&path)).unwrap();
assert_eq!(i.val, TestEnum::Val1); assert_eq!(i.val, TestEnum::Val1);
let mut path = Path::new("/val3/"); let mut path = Path::new("/val3/");

View file

@ -163,9 +163,7 @@ impl<T: ResourcePath> Path<T> {
} }
/// Try to deserialize matching parameters to a specified type `U` /// Try to deserialize matching parameters to a specified type `U`
pub fn load<'de, U: serde::Deserialize<'de>>( pub fn load<'de, U: serde::Deserialize<'de>>(&'de self) -> Result<U, de::value::Error> {
&'de self,
) -> Result<U, de::value::Error> {
de::Deserialize::deserialize(PathDeserializer::new(self)) de::Deserialize::deserialize(PathDeserializer::new(self))
} }
} }

View file

@ -346,8 +346,7 @@ impl ResourceDef {
loop { loop {
let start = if pattern.starts_with('/') { 1 } else { 0 }; let start = if pattern.starts_with('/') { 1 } else { 0 };
let idx = if let Some(idx) = pattern[start..].find(|c| c == '{' || c == '/') let idx = if let Some(idx) = pattern[start..].find(|c| c == '{' || c == '/') {
{
idx + start idx + start
} else { } else {
break; break;
@ -551,8 +550,7 @@ mod tests {
assert_eq!(tree.find(&mut resource), Some(1)); assert_eq!(tree.find(&mut resource), Some(1));
assert_eq!(resource.get("id").unwrap(), "012345"); assert_eq!(resource.get("id").unwrap(), "012345");
let re = let re = ResourceDef::new("/u/test/v{version}-no-{minor}xx/resource/{id}/{name}");
ResourceDef::new("/u/test/v{version}-no-{minor}xx/resource/{id}/{name}");
let tree = Tree::new(&re, 1); let tree = Tree::new(&re, 1);
let mut resource = Path::new("/u/test/v1-no-3xx/resource/320120/name"); let mut resource = Path::new("/u/test/v1-no-3xx/resource/320120/name");
assert_eq!(tree.find(&mut resource), Some(1)); assert_eq!(tree.find(&mut resource), Some(1));

View file

@ -37,10 +37,7 @@ impl<T, U> Router<T, U> {
} }
} }
pub fn recognize_mut<R, P>( pub fn recognize_mut<R, P>(&mut self, resource: &mut R) -> Option<(&mut T, ResourceId)>
&mut self,
resource: &mut R,
) -> Option<(&mut T, ResourceId)>
where where
R: Resource<P>, R: Resource<P>,
P: ResourcePath, P: ResourcePath,

View file

@ -161,11 +161,7 @@ impl Tree {
self.find_checked_inner(resource, true, &|_, _| true) self.find_checked_inner(resource, true, &|_, _| true)
} }
pub(crate) fn find_checked<T, R, F>( pub(crate) fn find_checked<T, R, F>(&self, resource: &mut R, check: &F) -> Option<usize>
&self,
resource: &mut R,
check: &F,
) -> Option<usize>
where where
T: ResourcePath, T: ResourcePath,
R: Resource<T>, R: Resource<T>,
@ -494,9 +490,7 @@ impl Tree {
if let Item::Value(ref val) = val { if let Item::Value(ref val) = val {
let v = match val { let v = match val {
Value::Val(v) | Value::Prefix(v) => *v, Value::Val(v) | Value::Prefix(v) => *v,
Value::Slash(_) | Value::PrefixSlash(_) => { Value::Slash(_) | Value::PrefixSlash(_) => continue,
continue
}
}; };
if check(v, resource) { if check(v, resource) {
return Some((v, skip)); return Some((v, skip));
@ -537,16 +531,14 @@ impl Tree {
} }
} }
Value::Prefix(v) => { Value::Prefix(v) => {
if p == PathState::Slash || p == PathState::Tail if p == PathState::Slash || p == PathState::Tail {
{
*v *v
} else { } else {
continue; continue;
} }
} }
Value::PrefixSlash(v) => { Value::PrefixSlash(v) => {
if p == PathState::Slash || p == PathState::Tail if p == PathState::Slash || p == PathState::Tail {
{
*v *v
} else { } else {
continue; continue;

View file

@ -11,8 +11,7 @@ use crate::{system::System, Runtime};
thread_local!( thread_local!(
static ADDR: RefCell<Option<Arbiter>> = RefCell::new(None); static ADDR: RefCell<Option<Arbiter>> = RefCell::new(None);
static STORAGE: RefCell<HashMap<TypeId, Box<dyn Any>>> = static STORAGE: RefCell<HashMap<TypeId, Box<dyn Any>>> = RefCell::new(HashMap::new());
RefCell::new(HashMap::new());
); );
pub(super) static COUNT: AtomicUsize = AtomicUsize::new(0); pub(super) static COUNT: AtomicUsize = AtomicUsize::new(0);
@ -173,9 +172,8 @@ impl Arbiter {
/// Set item to current arbiter's storage /// Set item to current arbiter's storage
pub fn set_item<T: 'static>(item: T) { pub fn set_item<T: 'static>(item: T) {
STORAGE.with(move |cell| { STORAGE
cell.borrow_mut().insert(TypeId::of::<T>(), Box::new(item)) .with(move |cell| cell.borrow_mut().insert(TypeId::of::<T>(), Box::new(item)));
});
} }
/// Check if arbiter storage contains item /// Check if arbiter storage contains item
@ -211,9 +209,7 @@ impl Arbiter {
let mut st = cell.borrow_mut(); let mut st = cell.borrow_mut();
let item = st let item = st
.get_mut(&TypeId::of::<T>()) .get_mut(&TypeId::of::<T>())
.and_then(|boxed| { .and_then(|boxed| (&mut **boxed as &mut (dyn Any + 'static)).downcast_mut())
(&mut **boxed as &mut (dyn Any + 'static)).downcast_mut()
})
.unwrap(); .unwrap();
f(item) f(item)
}) })

View file

@ -77,9 +77,7 @@ pub fn from_tcp_stream(stream: net::TcpStream) -> Result<Io, io::Error> {
#[cfg(unix)] #[cfg(unix)]
/// Convert std UnixStream to tokio's UnixStream /// Convert std UnixStream to tokio's UnixStream
pub fn from_unix_stream( pub fn from_unix_stream(stream: std::os::unix::net::UnixStream) -> Result<Io, io::Error> {
stream: std::os::unix::net::UnixStream,
) -> Result<Io, io::Error> {
stream.set_nonblocking(true)?; stream.set_nonblocking(true)?;
Ok(Io::new(tok_io::net::UnixStream::from_std(stream)?)) Ok(Io::new(tok_io::net::UnixStream::from_std(stream)?))
} }

View file

@ -193,10 +193,7 @@ impl<T> Unpin for Receiver<T> {}
impl<T> Stream for Receiver<T> { impl<T> Stream for Receiver<T> {
type Item = T; type Item = T;
fn poll_next( fn poll_next(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Option<Self::Item>> {
self: Pin<&mut Self>,
cx: &mut Context<'_>,
) -> Poll<Option<Self::Item>> {
self.poll_recv(cx) self.poll_recv(cx)
} }
} }

View file

@ -660,8 +660,7 @@ mod tests {
let _elapsed = Instant::now() - time; let _elapsed = Instant::now() - time;
#[cfg(not(target_os = "macos"))] #[cfg(not(target_os = "macos"))]
assert!( assert!(
_elapsed > Duration::from_millis(200) _elapsed > Duration::from_millis(200) && _elapsed < Duration::from_millis(300),
&& _elapsed < Duration::from_millis(300),
"elapsed: {:?}", "elapsed: {:?}",
_elapsed _elapsed
); );

View file

@ -1,2 +1,2 @@
max_width = 89 max_width = 92
reorder_imports = true reorder_imports = true