struct withdraw { std::string account; unsigned amount; mutable messaging::sender atm_queue; withdraw(std::string const& account_, unsigned amount_, messaging::sender atm_queue_) : account(account_), amount(amount_), atm_queue(atm_queue_) { } }; struct withdraw_ok { }; struct withdraw_denied { }; struct cancel_withdrawal { std::string account; unsigned amount; cancel_withdrawal(std::string const& account_, unsigned amount_) : account(account_), amount(amount_) { } }; struct withdrawal_processed { std::string account; unsigned amount; withdrawal_processed(std::string const& account_, unsigned amount_) : account(account_), amount(amount_) { } }; struct card_inserted { std::string account; explicit card_inserted(std::string const& account_) : account(account_) {} }; struct digit_pressed { char digit; explicit digit_pressed(char digit_) : digit(digit_) {} }; struct clear_last_pressed { }; struct eject_card { }; struct withdraw_pressed { unsigned amount; explicit withdraw_pressed(unsigned amount_) : amount(amount_) {} }; struct cancel_pressed { }; struct issue_money { unsigned amount; issue_money(unsigned amount_) : amount(amount_) {} }; struct verify_pin { std::string account; std::string pin; mutable messaging::sender atm_queue; verify_pin(std::string const& account_, std::string const& pin_, messaging::sender atm_queue_) : account(account_), pin(pin_), atm_queue(atm_queue_) { } }; struct pin_verified { }; struct pin_incorrect { }; struct display_enter_pin { }; struct display_enter_card { }; struct display_insufficient_funds { }; struct display_withdrawal_cancelled { }; struct display_pin_incorrect_message { }; struct display_withdrawal_options { }; struct get_balance { std::string account; mutable messaging::sender atm_queue; get_balance(std::string const& account_, messaging::sender atm_queue_) : account(account_), atm_queue(atm_queue_) { } }; struct balance { unsigned amount; explicit balance(unsigned amount_) : amount(amount_) {} }; struct display_balance { unsigned amount; explicit display_balance(unsigned amount_) : amount(amount_) {} }; struct balance_pressed { };