mirror of
https://github.com/mainmatter/100-exercises-to-learn-rust
synced 2025-02-14 08:48:29 +01:00
![iacri](/assets/img/avatar_default.png)
Some checks failed
CI / build (push) Has been cancelled
CI / is_fresh (push) Has been cancelled
CI / formatter (push) Has been cancelled
Characters was meant to be bytes, this was missed in a former refactoring
38 lines
1.2 KiB
Rust
38 lines
1.2 KiB
Rust
// TODO: Implement `TryFrom<String>` and `TryFrom<&str>` for the `TicketTitle` type,
|
|
// enforcing that the title is not empty and is not longer than 50 bytes.
|
|
// Implement the traits required to make the tests pass too.
|
|
|
|
pub struct TicketTitle(String);
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use super::*;
|
|
use std::convert::TryFrom;
|
|
|
|
#[test]
|
|
fn test_try_from_string() {
|
|
let title = TicketTitle::try_from("A title".to_string()).unwrap();
|
|
assert_eq!(title.0, "A title");
|
|
}
|
|
|
|
#[test]
|
|
fn test_try_from_empty_string() {
|
|
let err = TicketTitle::try_from("".to_string()).unwrap_err();
|
|
assert_eq!(err.to_string(), "The title cannot be empty");
|
|
}
|
|
|
|
#[test]
|
|
fn test_try_from_long_string() {
|
|
let title =
|
|
"A title that's definitely longer than what should be allowed in a development ticket"
|
|
.to_string();
|
|
let err = TicketTitle::try_from(title).unwrap_err();
|
|
assert_eq!(err.to_string(), "The title cannot be longer than 50 bytes");
|
|
}
|
|
|
|
#[test]
|
|
fn test_try_from_str() {
|
|
let title = TicketTitle::try_from("A title").unwrap();
|
|
assert_eq!(title.0, "A title");
|
|
}
|
|
}
|