#![feature(catch_expr)]
use std::fs::File;
use std::io::{self, BufReader, Read};
fn main(){
try {
let f = File::open("foo.txt")?;
let mut f = BufReader::new(f);
let mut buf = String::new();
f.read_to_string(&mut buf)?;
println!("{}", buf);
Ok(())
}.unwrap_or_else(|err: io::Error| {
eprintln!("An error occured: {}", err);
})
}
try & catchではなく、matchで実装する
fn main(){
let file_path = "foo.txt";
match std::fs::remove_file(file_path) {
Ok(()) => {},
Err(e) => {
eprintln!("Failed deleting file{}. Error caut:", file_path);
// return Err(e);
}
}
}
$ ./main
Failed deleting filefoo.txt. Error caut:
true or falseの場合はifで大丈夫
fn main(){
let private_key: SigningKey = SigningKey::from_bytes(&hex!(
"DCDFF4B7CA287CC7BD30ECAEF0622265DB4E14054E12954225457C3A6B84F135"
).into()).unwrap();
let public_key: &VerifyingKey = private_key.verifying_key();
let message = b"hello, world";
let signature: Signature = private_key.sign(message);
let verified = public_key.verify(message, &signature).is_ok();
println!("private key: {:X?}", hex(&private_key.to_bytes()));
println!("public key: {:X?}", hex(&public_key.to_encoded_point(false).to_bytes()));
println!("Signature: {:X?}", hex(&signature.to_bytes()));
if verified {
println!("文章は改竄されていません。");
} else {
println!("文章が改竄されています。");
}
}
private key: “dcdff4b7ca287cc7bd30ecaef0622265db4e1454e12954225457c3a6b84f135”
public key: “4bac6cb0f4ad6397752c3d73b88c5c86e3d88ac695118494a1732e2abd16c76acad3d6586c37c8db7e69c2f812f99275198936957d72c38d71981991123”
Signature: “f690afffd24623627bfa97996873a6a9d8ca8e9bb7ab6ad269c929453b42985573cdc4c05b8522224065757fef6c181c8418ffd3debdab4be22a73b2e5b6ce”
文章は改竄されていません。