fn parse_token_json()

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,
    })
}