Advertisement
Guest User

Untitled

a guest
Apr 18th, 2019
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.27 KB | None | 0 0
  1. #![allow(unused)]
  2.  
  3. use std::fmt;
  4. use std::any::Any;
  5.  
  6.  
  7. #[derive(Debug, Clone)]
  8. struct XStruct{
  9. a: i32,
  10. b: String,
  11. }
  12.  
  13. impl XStruct {
  14. fn new() -> XStruct {
  15. XStruct{
  16. a : -1,
  17. b : String::from("XStruct"),
  18. }
  19. }
  20. }
  21.  
  22. #[derive(Debug, Clone)]
  23. struct YStruct{
  24. a: u64,
  25. b: u8,
  26. }
  27.  
  28. impl YStruct {
  29. fn new() -> YStruct {
  30. YStruct{
  31. a : 2,
  32. b : 255,
  33. }
  34. }
  35. }
  36. #[derive(Debug, Clone)]
  37. enum Container {
  38. X(XStruct),
  39. Y(YStruct),
  40. }
  41.  
  42. trait Concatenate {
  43. fn foo(&mut self) -> String {
  44. unimplemented!()
  45. }
  46. fn bar(&mut self) -> String {
  47. unimplemented!()
  48. }
  49. fn fuu(&mut self) -> String {
  50. unimplemented!()
  51. }
  52. }
  53.  
  54. impl Concatenate for YStruct {
  55. fn foo(&mut self) -> String {
  56. format!("foo:{}{}",self.a,self.b)
  57. }
  58. fn bar(&mut self) -> String {
  59. format!("bar:{}{}",self.a,self.b)
  60. }
  61. fn fuu(&mut self) -> String {
  62. format!("fuu:{}{}",self.a,self.b)
  63. }
  64. }
  65.  
  66. impl Concatenate for XStruct {
  67. fn foo(&mut self) -> String {
  68. format!("foo:{}{}",self.a,self.b)
  69. }
  70. fn bar(&mut self) -> String {
  71. format!("bar:{}{}",self.a,self.b)
  72. }
  73. fn fuu(&mut self) -> String {
  74. format!("fuu:{}{}",self.a,self.b)
  75. }
  76. }
  77.  
  78. fn main() {
  79. let mut x = XStruct::new();
  80. let mut y = YStruct::new();
  81. println!("XStruct {:?}",x);
  82. println!("concat {}",x.foo());
  83. println!("YStruct {:?}",y);
  84. println!("concat {}",y.bar());
  85.  
  86. let container = build(false);
  87. println!("container {:?}",container);
  88.  
  89. match container {
  90. Container::X(mut x) => {
  91. println!("{}",x.foo());
  92. println!("{}",x.bar());
  93. println!("{}",x.fuu());
  94. },
  95. Container::Y(mut y) => {
  96. println!("{}",y.foo());
  97. println!("{}",y.bar());
  98. println!("{}",y.fuu());
  99. }
  100. }
  101.  
  102. // Question ? As I am calling Trait function can I do it without match ?
  103. /*
  104. println!("{}",container.foo());
  105. println!("{}",container.bar());
  106. println!("{}",container.fuu());
  107. */
  108.  
  109. }
  110.  
  111. fn build(selector : bool) -> Container {
  112. if selector {
  113. Container::X(XStruct::new())
  114. } else {
  115. Container::Y(YStruct::new())
  116. }
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement