diff --git a/tp1/Cargo.toml b/tp1/Cargo.toml new file mode 100644 index 0000000000000000000000000000000000000000..c86f6d05fb33870e276b6cd3a504919b2c69cc7c --- /dev/null +++ b/tp1/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "tp1" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/tp1/src/main.rs b/tp1/src/main.rs new file mode 100644 index 0000000000000000000000000000000000000000..fa87dccb77504febb08b13888c344c15799bdc37 --- /dev/null +++ b/tp1/src/main.rs @@ -0,0 +1,130 @@ +use std::{io, net::IpAddr}; + +pub enum PasswordError { + Empty, + Wrong, +} + +/// A type that can be used to check if a given input is a valid password +pub struct PasswordChecker { + secret: String, +} + +impl PasswordChecker { + fn new(pass: &str) -> Self { + Self {secret : pass.to_string() } + } + + pub fn check(&self, input: &str) -> Result<(), PasswordError> { + if input.trim() == self.secret { + Ok(()) + }else { + if input.trim().is_empty() { + Err(PasswordError::Empty) + }else { + Err(PasswordError::Wrong) + } + } + } +} + +fn main() { + println!("Hello, world!"); + + // let x: i8 = 42; + // println!("{x}"); + // eprintln!("{x:#08x}"); + + // let mut y = 1; + // while y < 11 { + // println!("{y}"); + // y += 1; + // } + + // check_password(); + + println!("Enter password: "); + let mut input = String::new(); + let _ = io::stdin().read_line(&mut input); + let checker = PasswordChecker::new("Rust"); + + // Call the check function on the checker. + // This function should have the same return type as + // the check_password function of the previous exercise + match checker.check(&input) { + Ok(()) => println!("ok"), + Err(PasswordError::Empty) => println!("Empty Password"), + Err(PasswordError::Wrong) => println!("Wrong password"), + } +} + +/// Reads a file that contains an address per line and returns a Vector with all well-formed +/// addresses and prints a warning on the standard error output for every malformed lines. +/// +/// Addresses should be ipv4 or ipv6 addresses. +fn get_addrs(path: &str) -> Result<Vec<IpAddr>, std::io::Error> { todo!{} } + + +/// Tries to connect to a given host with a TCP Connection with a one second timeout. +/// +/// Returns Ok(()) or a corresponding error if connection fails. +fn try_connect(addr: IpAddr, port: u16) -> Result<(), std::io::Error> { todo!() } + + + + + + + + + + + + + + + + + + + + +// fn check_password() { +// println!("Enter password: "); + +// let mut input = String::new(); +// let _ = io::stdin().read_line(&mut input); + +// match check_password3(&input) { +// Ok(()) => println!("ok"), +// Err(PasswordError::Empty) => println!("Empty Password"), +// Err(PasswordError::Wrong) => println!("Wrong password"), +// } +// } + +// Check an input for a predetermined secret password +// Returns `Ok(())` if the input matches the password or `Err(())` otherwise. +// pub fn check_password2(input: &str) -> Result<(), ()> { +// let predefined_password = "Rust"; +// if input.trim() == predefined_password { +// // println!("Good"); +// Ok(()) +// } else { +// // println!("Wrong"); +// Err(()) +// } +// } + +// pub fn check_password3(input: &str) -> Result<(), PasswordError> { +// let predefined_password = "Rust"; +// if input.trim() == predefined_password { +// Ok(()) +// } else { +// if input.trim().is_empty() { +// Err(PasswordError::Empty) +// }else { +// Err(PasswordError::Wrong) +// } +// } +// } +