mirror of https://github.com/01-edu/public.git
eslopfer
2 years ago
1 changed files with 63 additions and 0 deletions
@ -0,0 +1,63 @@ |
|||||||
|
## check_user_name |
||||||
|
|
||||||
|
### Instructions |
||||||
|
|
||||||
|
Sometimes it is more desirable to catch the failure of some parts of a program instead of just calling panic. |
||||||
|
|
||||||
|
For this exercise you will have to create a tool that manages users' access levels. |
||||||
|
|
||||||
|
You will have to create an `AccessLevel` enum wich could be `Guest`, `Normal`, `Admin`. |
||||||
|
|
||||||
|
You will also have to create a `User` struct which has: |
||||||
|
|
||||||
|
- elements: |
||||||
|
- `name`: `String` |
||||||
|
- `acessLevel`: `enum` |
||||||
|
- associated functions: |
||||||
|
- `new`: which initializes the struct. |
||||||
|
- `send_name`: which takes only **self** as argument and returns an **Option<&str>** with `None` if the user is a guest or the `name` if the `AccessLevel` has any of the other options. |
||||||
|
- `check_user_name`: which takes a `User`, calls `send_name` and returns a **tuple** with `true` and the user `name` if `send_name` returns the name or `false` and `"Error: User is guest"` if not |
||||||
|
|
||||||
|
### Expected Functions and Data Structures |
||||||
|
|
||||||
|
```rust |
||||||
|
pub enum AccessLevel {} |
||||||
|
|
||||||
|
pub struct User {} |
||||||
|
|
||||||
|
impl User { |
||||||
|
pub fn new(name: String, level: AccessLevel) -> User {} |
||||||
|
pub fn send_name(&self) -> Option<&str> {} |
||||||
|
} |
||||||
|
|
||||||
|
pub fn check_user_name(user: &User) -> (bool, &str) {} |
||||||
|
``` |
||||||
|
|
||||||
|
### Usage |
||||||
|
|
||||||
|
Here is a program to test your function |
||||||
|
|
||||||
|
```rust |
||||||
|
use check_user_name::*; |
||||||
|
|
||||||
|
fn main() { |
||||||
|
let user0 = User::new("Didier".to_string(), AccessLevel::Admin); |
||||||
|
println!("{:?}", check_user_name(&user0)); |
||||||
|
|
||||||
|
let user2 = User::new("Mary".to_string(), AccessLevel::Normal); |
||||||
|
println!("{:?}", check_user_name(&user2)); |
||||||
|
|
||||||
|
let user3 = User::new("John".to_string(), AccessLevel::Guest); |
||||||
|
println!("{:?}", check_user_name(&user3)); |
||||||
|
} |
||||||
|
``` |
||||||
|
|
||||||
|
And its output: |
||||||
|
|
||||||
|
```console |
||||||
|
$ cargo run |
||||||
|
(true, "Didier") |
||||||
|
(true, "Mary") |
||||||
|
(false, "ERROR: User is guest") |
||||||
|
$ |
||||||
|
``` |
Loading…
Reference in new issue