Advertisement
Guest User

Untitled

a guest
Jun 17th, 2019
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.65 KB | None | 0 0
  1. trait Blanket {
  2. fn blanket(&self) -> &'static str;
  3. }
  4.  
  5. struct StringBlanket<'a>(&'a String);
  6.  
  7. impl<'a> Blanket for StringBlanket<'a> {
  8. fn blanket(&self) -> &'static str {
  9. "string"
  10. }
  11. }
  12.  
  13. struct CloneBlanket<T: Clone>(T);
  14.  
  15. impl<T: Clone> Blanket for CloneBlanket<T> {
  16. fn blanket(&self) -> &'static str {
  17. "clone"
  18. }
  19. }
  20.  
  21. impl<'a> Into<StringBlanket<'a>> for &'a String {
  22. fn into(self) -> StringBlanket<'a> {
  23. StringBlanket(self)
  24. }
  25. }
  26.  
  27. fn blanket<B: Blanket, T: Into<B>>(b: T) {
  28. let b = b.into();
  29. println!("{}", b.blanket());
  30. }
  31.  
  32.  
  33. fn main() {
  34. blanket::<StringBlanket<'_>, _>(&"123".to_string());
  35. blanket(123);
  36. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement