1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
use serde::{Deserialize, Serialize};
/// Contains data required for decrypting and authenticating
/// [`EncryptedPassportElement`].
///
/// See the [Telegram Passport Documentation] for a complete description of the
/// data decryption and authentication processes.
///
/// [The official docs](https://core.telegram.org/bots/api#encryptedcredentials).
///
/// [`EncryptedPassportElement`]:
/// crate::types::EncryptedPassportElement
/// [Telegram Passport Documentation]: https://core.telegram.org/passport#receiving-information
#[serde_with_macros::skip_serializing_none]
#[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
pub struct EncryptedCredentials {
/// Base64-encoded encrypted JSON-serialized data with unique user's
/// payload, data hashes and secrets required for
/// [`EncryptedPassportElement`] decryption and authentication.
///
/// [`EncryptedPassportElement`]:
/// crate::types::EncryptedPassportElement
pub data: String, // TODO: check base64 type
/// Base64-encoded data hash for data authentication.
pub hash: String,
/// A base64-encoded secret, encrypted with the bot's public RSA key,
/// required for data decryption.
pub secret: String,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn must_serialize_encrypted_credentials_to_json() {
// given
let expected_json = r#"
{
"data":"someData",
"hash":"1122",
"secret":"secret"
}"#
.replace('\n', "")
.replace(' ', "");
let encrypted_credentials = EncryptedCredentials {
data: "someData".to_string(),
hash: "1122".to_string(),
secret: "secret".to_string(),
};
// when
let actual_json = serde_json::to_string(&encrypted_credentials).unwrap();
//then
assert_eq!(actual_json, expected_json)
}
}