clone-free validate function (#179)

* clone-free validate function

It could save up to 300ns in my benches
This commit is contained in:
Saber Haj Rabiee 2021-03-04 08:28:05 -08:00 committed by Vincent Prouillet
parent d8cc36dd0c
commit f3566ecd82
1 changed files with 13 additions and 5 deletions

View File

@ -2,7 +2,7 @@ use std::collections::HashSet;
use std::time::{SystemTime, UNIX_EPOCH};
use serde_json::map::Map;
use serde_json::{from_value, Value};
use serde_json::Value;
use crate::algorithms::Algorithm;
use crate::errors::{new_error, ErrorKind, Result};
@ -111,7 +111,11 @@ pub fn validate(claims: &Map<String, Value>, options: &Validation) -> Result<()>
if options.validate_exp {
if let Some(exp) = claims.get("exp") {
if from_value::<u64>(exp.clone())? < now - options.leeway {
if let Some(exp) = exp.as_u64() {
if exp < now - options.leeway {
return Err(new_error(ErrorKind::ExpiredSignature));
}
} else {
return Err(new_error(ErrorKind::ExpiredSignature));
}
} else {
@ -121,7 +125,11 @@ pub fn validate(claims: &Map<String, Value>, options: &Validation) -> Result<()>
if options.validate_nbf {
if let Some(nbf) = claims.get("nbf") {
if from_value::<u64>(nbf.clone())? > now + options.leeway {
if let Some(nbf) = nbf.as_u64() {
if nbf > now + options.leeway {
return Err(new_error(ErrorKind::ImmatureSignature));
}
} else {
return Err(new_error(ErrorKind::ImmatureSignature));
}
} else {
@ -130,8 +138,8 @@ pub fn validate(claims: &Map<String, Value>, options: &Validation) -> Result<()>
}
if let Some(ref correct_sub) = options.sub {
if let Some(sub) = claims.get("sub") {
if from_value::<String>(sub.clone())? != *correct_sub {
if let Some(Value::String(sub)) = claims.get("sub") {
if sub != correct_sub {
return Err(new_error(ErrorKind::InvalidSubject));
}
} else {