in aws/rust-runtime/aws-config/src/sso.rs [277:312]
fn parse_token_json(input: &[u8]) -> Result<SsoToken, InvalidJsonCredentials> {
/*
Example:
{
"accessToken": "base64string",
"expiresAt": "2019-11-14T04:05:45Z",
"region": "us-west-2",
"startUrl": "https://d-abc123.awsapps.com/start"
}*/
let mut acccess_token = None;
let mut expires_at = None;
let mut region = None;
let mut start_url = None;
json_parse_loop(input, |key, value| match key {
key if key.eq_ignore_ascii_case("accessToken") => acccess_token = Some(value.to_string()),
key if key.eq_ignore_ascii_case("expiresAt") => expires_at = Some(value),
key if key.eq_ignore_ascii_case("region") => region = Some(value.to_string()),
key if key.eq_ignore_ascii_case("startUrl") => start_url = Some(value.to_string()),
_other => {} // ignored
})?;
let access_token =
Zeroizing::new(acccess_token.ok_or(InvalidJsonCredentials::MissingField("accessToken"))?);
let expires_at = expires_at.ok_or(InvalidJsonCredentials::MissingField("expiresAt"))?;
let expires_at = DateTime::from_str(expires_at.as_ref(), Format::DateTime).map_err(|e| {
InvalidJsonCredentials::InvalidField {
field: "expiresAt",
err: e.into(),
}
})?;
let region = region.map(Region::new);
Ok(SsoToken {
access_token,
expires_at,
region,
})
}