Optimize Dynamic::is.
This commit is contained in:
parent
8bbb382d9c
commit
5ba9b3bd1c
@ -346,11 +346,52 @@ impl Dynamic {
|
|||||||
#[inline]
|
#[inline]
|
||||||
#[must_use]
|
#[must_use]
|
||||||
pub fn is<T: Any + Clone>(&self) -> bool {
|
pub fn is<T: Any + Clone>(&self) -> bool {
|
||||||
if TypeId::of::<T>() == TypeId::of::<String>() {
|
if TypeId::of::<T>() == TypeId::of::<()>() {
|
||||||
self.type_id() == TypeId::of::<ImmutableString>()
|
return matches!(self.0, Union::Unit(..));
|
||||||
} else {
|
|
||||||
self.type_id() == TypeId::of::<T>()
|
|
||||||
}
|
}
|
||||||
|
if TypeId::of::<T>() == TypeId::of::<bool>() {
|
||||||
|
return matches!(self.0, Union::Bool(..));
|
||||||
|
}
|
||||||
|
if TypeId::of::<T>() == TypeId::of::<char>() {
|
||||||
|
return matches!(self.0, Union::Char(..));
|
||||||
|
}
|
||||||
|
if TypeId::of::<T>() == TypeId::of::<INT>() {
|
||||||
|
return matches!(self.0, Union::Int(..));
|
||||||
|
}
|
||||||
|
#[cfg(not(feature = "no_float"))]
|
||||||
|
if TypeId::of::<T>() == TypeId::of::<crate::FLOAT>() {
|
||||||
|
return matches!(self.0, Union::Float(..));
|
||||||
|
}
|
||||||
|
if TypeId::of::<T>() == TypeId::of::<ImmutableString>()
|
||||||
|
|| TypeId::of::<T>() == TypeId::of::<String>()
|
||||||
|
{
|
||||||
|
return matches!(self.0, Union::Str(..));
|
||||||
|
}
|
||||||
|
#[cfg(not(feature = "no_index"))]
|
||||||
|
if TypeId::of::<T>() == TypeId::of::<crate::Array>() {
|
||||||
|
return matches!(self.0, Union::Array(..));
|
||||||
|
}
|
||||||
|
#[cfg(not(feature = "no_index"))]
|
||||||
|
if TypeId::of::<T>() == TypeId::of::<crate::Blob>() {
|
||||||
|
return matches!(self.0, Union::Blob(..));
|
||||||
|
}
|
||||||
|
#[cfg(not(feature = "no_object"))]
|
||||||
|
if TypeId::of::<T>() == TypeId::of::<crate::Map>() {
|
||||||
|
return matches!(self.0, Union::Map(..));
|
||||||
|
}
|
||||||
|
#[cfg(not(feature = "decimal"))]
|
||||||
|
if TypeId::of::<T>() == TypeId::of::<rust_decimal::Decimal>() {
|
||||||
|
return matches!(self.0, Union::Decimal(..));
|
||||||
|
}
|
||||||
|
if TypeId::of::<T>() == TypeId::of::<FnPtr>() {
|
||||||
|
return matches!(self.0, Union::FnPtr(..));
|
||||||
|
}
|
||||||
|
#[cfg(not(feature = "no_std"))]
|
||||||
|
if TypeId::of::<T>() == TypeId::of::<crate::Instant>() {
|
||||||
|
return matches!(self.0, Union::TimeStamp(..));
|
||||||
|
}
|
||||||
|
|
||||||
|
TypeId::of::<T>() == self.type_id()
|
||||||
}
|
}
|
||||||
/// Get the [`TypeId`] of the value held by this [`Dynamic`].
|
/// Get the [`TypeId`] of the value held by this [`Dynamic`].
|
||||||
///
|
///
|
||||||
|
Loading…
x
Reference in New Issue
Block a user