Advertisement
Guest User

Untitled

a guest
Jun 17th, 2019
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.24 KB | None | 0 0
  1. use std::fmt;
  2.  
  3. pub enum ApiFlavor {
  4. Foo,
  5. Bar,
  6. }
  7.  
  8. impl fmt::Display for ApiFlavor {
  9. fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
  10. match self {
  11. ApiFlavor::Foo => f.write_str("Foo"),
  12. ApiFlavor::Bar => f.write_str("Bar"),
  13. }
  14. }
  15. }
  16.  
  17. pub struct Context {
  18. username: Option<String>,
  19. api_flavor: Option<ApiFlavor>,
  20. }
  21.  
  22. pub fn print_ctx(ctx: &Context) {
  23. println!(
  24. " API: {}",
  25. ctx.api_flavor.as_ref()
  26. .map(ApiFlavor::to_string)
  27. .unwrap_or_else(|| String::from("<none>"))
  28. );
  29.  
  30. // better
  31. println!(
  32. " API: {}",
  33. ctx.api_flavor.as_ref()
  34. .map_or_else(|| String::from("<none>"), ApiFlavor::to_string)
  35. );
  36.  
  37. println!(
  38. " Username: {}",
  39. ctx.username.as_ref().unwrap_or(&String::from("<none>"))
  40. );
  41.  
  42. // better
  43. println!(
  44. " Username: {}",
  45. ctx.username.as_ref()
  46. .map_or_else(|| String::from("<none>"), String::to_string)
  47. );
  48. }
  49.  
  50. pub fn main() {
  51. print_ctx(&Context {
  52. username: Some("Alice".into()),
  53. api_flavor: Some(ApiFlavor::Foo),
  54. });
  55.  
  56. print_ctx(&Context {
  57. username: None,
  58. api_flavor: None,
  59. });
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement