Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.31 KB | None | 0 0
  1. public static class CartExtensions
  2. {
  3. public static Cart<TItem> Add<TItem>(this Cart<TItem> cart, TItem item)
  4. => cart.Match<Cart<TItem>, Cart<TItem>>()
  5. .With<EmptyCart<TItem>>(x => x.AddItem(item))
  6. .With<ActiveCart<TItem>>(x => x.AddItem(item))
  7. .With<PaidCart<TItem>>(x =>
  8. {
  9. Console.WriteLine("ERROR: The cart is paid for and items cannot be added");
  10. return x;
  11. })
  12. .Return();
  13.  
  14. public static Cart<TItem> Remove<TItem>(this Cart<TItem> cart, TItem item)
  15. => cart.Match<Cart<TItem>, Cart<TItem>>()
  16. .With<EmptyCart<TItem>>(x =>
  17. {
  18. Console.WriteLine("ERROR: The cart is empty and items cannot be removed");
  19. return x;
  20. })
  21. .With<ActiveCart<TItem>>(x => x.RemoveItem(item))
  22. .With<PaidCart<TItem>>(x =>
  23. {
  24. Console.WriteLine("ERROR: The cart is paid for and items cannot be removed");
  25. return x;
  26. })
  27. .Return();
  28.  
  29. public static void Display<TItem>(this Cart<TItem> cart)
  30. => cart.Match<Cart<TItem>, object>()
  31. .With<EmptyCart<TItem>>(x =>
  32. {
  33. Console.WriteLine("The cart is empty");
  34. return null;
  35. })
  36. .With<ActiveCart<TItem>>(x =>
  37. {
  38. Console.WriteLine("The active cart contains {0} items", x.Items.Count());
  39. return null;
  40. })
  41. .With<PaidCart<TItem>>(x =>
  42. {
  43. Console.WriteLine("The paid cart contains {0} items. Amount paid {1}");
  44. return null;
  45. })
  46. .Return();
  47. }
  48.  
  49. static void Main(string[] args)
  50. {
  51. var emptyCart = new EmptyCart<string>();
  52. emptyCart.Display();
  53.  
  54. var cartA = emptyCart.Add("A"); //one item
  55. emptyCart.Add("A").Display();
  56.  
  57. var cartAb = cartA.Add("B"); //two items
  58. cartAb.Display();
  59.  
  60. var cartB = cartAb.Remove("A"); //one item
  61. cartB.Display();
  62.  
  63. var emptyCart2 = cartB.Remove("B"); //empty
  64. emptyCart2.Display();
  65.  
  66. Console.WriteLine("Removing from emptyCart");
  67. emptyCart.Remove("B"); //error
  68.  
  69. // try to pay for cartA
  70.  
  71. Console.WriteLine("paying for cartA");
  72. var paidCart = cartA.Match<Cart<string>, Cart<string>>()
  73. .With<EmptyCart<string>>(x => x)
  74. .With<ActiveCart<string>>(x => x.Pay(100))
  75. .With<PaidCart<string>>(x => x)
  76. .Return();
  77.  
  78. paidCart.Display();
  79.  
  80. Console.WriteLine("paying for emptyCart");
  81. var emptyCartPaid = emptyCart.Match<Cart<string>, Cart<string>>()
  82. .With<EmptyCart<string>>(x => emptyCart)
  83. .With<ActiveCart<string>>(x => x.Pay(100))
  84. .With<PaidCart<string>>(x => emptyCart)
  85. .Return();
  86.  
  87.  
  88. emptyCartPaid.Display();
  89. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement