Browse Source

docs(check_user_name): implement description of exercise

pull/1590/head
eslopfer 2 years ago
parent
commit
1c1966f536
  1. 63
      subjects/check_user_name/README.md

63
subjects/check_user_name/README.md

@ -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…
Cancel
Save