9个版本 (5个破坏性版本)
0.8.3 | 2024年4月29日 |
---|---|
0.8.2 | 2023年12月7日 |
0.7.0 | 2023年4月14日 |
0.5.0 | 2023年3月29日 |
0.1.1 |
|
#334 在 编码
990 每月下载量
33KB
708 行
email_pass
Email
和 Password
类型在 Rust 中。
Email数据类型
use email_pass::Email;
fn main() {
let email1 = Email::build("john", "example.com").expect("Error creating a email");
let email2 = Email::from_str("[email protected]").expect("Error with string email");
assert_eq!(&email1, &email2);
assert_eq!(email2.username(), "john");
assert_eq!(email2.domain(), "example.com");
}
Password数据类型
Password
类型区分原始密码和加密密码,并只提供每种密码的正确方法。
use email_pass::Password;
fn main() -> Result<(), Error> {
let encrypt_password = Password::new("ThisIsAPassPhrase.And.Secure.Password")
.check()? // raw password method
.to_encrypt_default()?; // raw password method
// encrypted passwords implements the Deref trait
let password = Password::from_encrypt(encrypt_password.as_str())?;
println!("{}", password);
Ok(())
}
以下代码无法编译,因为原始密码没有实现 Display 特性或 Debug 特性。
use email_pass::Password;
fn main() {
let password = Password::new("ThisIsAPassPhrase.And.Secure.Password");
println!("{}", &password); // ❌
println!("{:?}", &password); // ❌
}
旧版密码和Email类型
您可以使用 legacy
功能使用旧类型。
email_pass = { version = "0.7.0", features = ["legacy"] }
密码
use email_pass::Password;
fn main() {
let unsafe_password = Password::new("01234".to_string());
let safe_password = Password::new(
"ThisIsAPassPhrase.And.Secure.Password".to_string(),
);
assert!(unsafe_password.is_err());
assert!(safe_password.is_ok());
}
如果密码未加密,则无法访问内部值。
use email_pass::password::legacy::Password;
fn main() {
let mut password = Password::from_raw(
"ThisIsAPassPhrase.And.Secure.Password".to_string(),
);
assert!(password.try_to_str().is_err());
password.encrypt_password().expect("Error encrypting password");
assert!(password.try_to_str().is_ok());
}
Password
类型安全地实现了 Debug
特性。
fn main(){
let safe_password = Password::from_raw("ThisIsAPassPhrase.And.Secure.Password".to_string());
let str_password = format!("{:?}", &safe_password);
assert!(!str_password.contains("ThisIs"))
}
您可以使用 new
方法构建 Email
。
fn main(){
let correct_email = Email::new("[email protected]");
let incorrect_email = Email::new("example.com");
assert!(correct_email.is_ok());
assert!(incorrect_email.is_err());
}
Serde 支持
在 serde
功能中,Email
和 Password
类型实现了 Serialize
和 Deserialize
特性。
[dependencies]
email_pass = { version = "0.7.0", features = ["serde"] }
从版本 0.4.1 迁移到版本 <= 0.7.0
如果您不想破坏代码,只需使用 legacy
功能即可。
[dependencies]
email_pass = { version = "0.7.0", features = ["legacy"] }
然后,您可以使用导入尝试新密码类型
use email_pass::password::safe::Password;
从版本 0.4.1 迁移到版本 0.8.0+
升级时,您的代码可能已损坏,因为 v0.8.0
使用了新的错误API,并使用了新的 Email 构造函数。为了修复您的代码
- 将错误类型调整为迁移到新版本。
- 将所有
Deref
特性的使用替换为Password
类型。 - 将所有
Email::new
方法的使用替换为Email::build
或Email::from_str
。
从版本 0.7.0 迁移到版本 0.8.0+
与上述相同。但如果您已经使用过 safe
和 legacy
密码类型,则应选择其中之一。
致谢
感谢 letsgetrusty 提供的 代码库,这激发了 Password
类型的灵感。
依赖项
~6–8.5MB
~139K SLoC