Complete traits exercises

This commit is contained in:
Suzie Kim 2024-02-02 11:36:40 -05:00
parent a6ab524725
commit e2672ba060
No known key found for this signature in database
GPG key ID: 83C4CC3808F9AAE9
5 changed files with 16 additions and 11 deletions

View file

@ -7,13 +7,15 @@
// Execute `rustlings hint traits1` or use the `hint` watch subcommand for a // Execute `rustlings hint traits1` or use the `hint` watch subcommand for a
// hint. // hint.
// I AM NOT DONE
trait AppendBar { trait AppendBar {
fn append_bar(self) -> Self; fn append_bar(self) -> Self;
} }
impl AppendBar for String { impl AppendBar for String {
fn append_bar(mut self) -> Self {
self.push_str("Bar");
self
}
// TODO: Implement `AppendBar` for type `String`. // TODO: Implement `AppendBar` for type `String`.
} }

View file

@ -8,7 +8,6 @@
// //
// Execute `rustlings hint traits2` or use the `hint` watch subcommand for a hint. // Execute `rustlings hint traits2` or use the `hint` watch subcommand for a hint.
// I AM NOT DONE
trait AppendBar { trait AppendBar {
fn append_bar(self) -> Self; fn append_bar(self) -> Self;
@ -16,6 +15,13 @@ trait AppendBar {
// TODO: Implement trait `AppendBar` for a vector of strings. // TODO: Implement trait `AppendBar` for a vector of strings.
impl AppendBar for Vec<String> {
fn append_bar(mut self) -> Self {
self.push(String::from("Bar"));
self
}
}
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;

View file

@ -8,10 +8,10 @@
// Execute `rustlings hint traits3` or use the `hint` watch subcommand for a // Execute `rustlings hint traits3` or use the `hint` watch subcommand for a
// hint. // hint.
// I AM NOT DONE
pub trait Licensed { pub trait Licensed {
fn licensing_info(&self) -> String; fn licensing_info(&self) -> String {
String::from("Some information")
}
} }
struct SomeSoftware { struct SomeSoftware {

View file

@ -7,7 +7,6 @@
// Execute `rustlings hint traits4` or use the `hint` watch subcommand for a // Execute `rustlings hint traits4` or use the `hint` watch subcommand for a
// hint. // hint.
// I AM NOT DONE
pub trait Licensed { pub trait Licensed {
fn licensing_info(&self) -> String { fn licensing_info(&self) -> String {
@ -23,7 +22,7 @@ impl Licensed for SomeSoftware {}
impl Licensed for OtherSoftware {} impl Licensed for OtherSoftware {}
// YOU MAY ONLY CHANGE THE NEXT LINE // YOU MAY ONLY CHANGE THE NEXT LINE
fn compare_license_types(software: ??, software_two: ??) -> bool { fn compare_license_types(software: impl Licensed, software_two: impl Licensed) -> bool {
software.licensing_info() == software_two.licensing_info() software.licensing_info() == software_two.licensing_info()
} }

View file

@ -7,8 +7,6 @@
// Execute `rustlings hint traits5` or use the `hint` watch subcommand for a // Execute `rustlings hint traits5` or use the `hint` watch subcommand for a
// hint. // hint.
// I AM NOT DONE
pub trait SomeTrait { pub trait SomeTrait {
fn some_function(&self) -> bool { fn some_function(&self) -> bool {
true true
@ -30,7 +28,7 @@ impl SomeTrait for OtherStruct {}
impl OtherTrait for OtherStruct {} impl OtherTrait for OtherStruct {}
// YOU MAY ONLY CHANGE THE NEXT LINE // YOU MAY ONLY CHANGE THE NEXT LINE
fn some_func(item: ??) -> bool { fn some_func(item: impl SomeTrait + OtherTrait) -> bool {
item.some_function() && item.other_function() item.some_function() && item.other_function()
} }