mirror of https://github.com/01-edu/public.git
nprimo
2 years ago
committed by
Niccolò Primo
1 changed files with 106 additions and 0 deletions
@ -0,0 +1,106 @@
|
||||
## get_document_id |
||||
|
||||
### Instructions |
||||
|
||||
Create the following structures which will help you get the `document_id` of the document you need. |
||||
|
||||
- `OfficeOne`: `next_office` as type `Result<OfficeTwo, ErrorOffice>`. |
||||
- `OfficeTwo`: `next_office` as type `Result<OfficeThree, ErrorOffice>`. |
||||
- `OfficeThree`: `next_office` as type `Result<OfficeFour, ErrorOffice>`. |
||||
- `OfficeFour`: `document_id` as type `Result<u32, ErrorOffice>`. |
||||
|
||||
`ErrorOffice` is an `enum` with `OfficeClosed(u32)`, `OfficeNotFound(u32)` or `OfficeFull(u32)`. |
||||
|
||||
The `usize` is the `id` of the office generating the error. |
||||
|
||||
Beside the structures, you must create a **function** named `get_document_id`, and associate it to the `OfficeOne` structure. |
||||
|
||||
This **function** should return the `Result` value in the `OfficeFour` structure or the first `Err` it finds in the chain. |
||||
|
||||
### Expected Function and structures |
||||
|
||||
```rust |
||||
#[derive(Clone, Copy)] |
||||
pub enum ErrorOffice { |
||||
OfficeClose(u32), |
||||
OfficeNotFound(u32), |
||||
OfficeFull(u32), |
||||
} |
||||
|
||||
#[derive(Clone, Copy)] |
||||
pub struct OfficeOne { |
||||
pub next_office: Result<OfficeTwo, ErrorOffice>, |
||||
} |
||||
|
||||
#[derive(Clone, Copy)] |
||||
pub struct OfficeTwo { |
||||
pub next_office: Result<OfficeThree, ErrorOffice>, |
||||
} |
||||
|
||||
#[derive(Clone, Copy)] |
||||
pub struct OfficeThree { |
||||
pub next_office: Result<OfficeFour, ErrorOffice>, |
||||
} |
||||
|
||||
#[derive(Clone, Copy)] |
||||
pub struct OfficeFour { |
||||
pub document_id: Result<u32, ErrorOffice>, |
||||
} |
||||
|
||||
impl OfficeOne { |
||||
pub fn get_document_id(&self) -> Result<u32, ErrorOffice> {} |
||||
} |
||||
``` |
||||
|
||||
### Usage |
||||
|
||||
Here is a program to test your function. |
||||
|
||||
```rust |
||||
use get_document_id::*; |
||||
|
||||
fn main() { |
||||
let office_ok = OfficeOne { |
||||
next_office: Ok(OfficeTwo { |
||||
next_office: Ok(OfficeThree { |
||||
next_office: Ok(OfficeFour { |
||||
document_id: Ok(13), |
||||
}), |
||||
}), |
||||
}), |
||||
}; |
||||
let office_closed = { |
||||
OfficeOne { |
||||
next_office: Ok(OfficeTwo { |
||||
next_office: Err(ErrorOffice::OfficeClose(13)), |
||||
}), |
||||
} |
||||
}; |
||||
|
||||
match office_ok.get_document_id() { |
||||
Ok(id) => println!("Found a document with id {}", id), |
||||
Err(err) => match err { |
||||
ErrorOffice::OfficeClose(_) => println!("Error: office closed!"), |
||||
ErrorOffice::OfficeNotFound(_) => println!("Error: office not found!"), |
||||
ErrorOffice::OfficeFull(_) => println!("Error: office full!"), |
||||
}, |
||||
}; |
||||
match office_closed.get_document_id() { |
||||
Ok(id) => println!("Found a document with id {}", id), |
||||
Err(err) => match err { |
||||
ErrorOffice::OfficeClose(_) => println!("Error: office closed!"), |
||||
ErrorOffice::OfficeNotFound(_) => println!("Error: office not found!"), |
||||
ErrorOffice::OfficeFull(_) => println!("Error: office full!"), |
||||
}, |
||||
}; |
||||
} |
||||
``` |
||||
|
||||
And its output: |
||||
|
||||
```console |
||||
$ cargo run |
||||
Found a document with id 13 |
||||
Error: office closed! |
||||
$ |
||||
``` |
Loading…
Reference in new issue