1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
//! Player actions that drive the Go Fish state machine.
//!
//! Every move a player can make is represented as a [`PlayerAction`] variant.
//! Pass one of these to [`crate::game::Game::act`] to advance the game.
//!
//! # Examples
//!
//! ```
//! use cardpack::prelude::{DeckedBase, Standard52};
//! use gfcore::prelude::{PlayerAction};
//!
//! let pile = Standard52::basic_pile();
//! let ace_rank = pile.v()[0].rank;
//!
//! let ask = PlayerAction::Ask { target: 1, rank: ace_rank };
//! let draw = PlayerAction::Draw;
//!
//! assert!(matches!(ask, PlayerAction::Ask { .. }));
//! assert!(matches!(draw, PlayerAction::Draw));
//! ```
use Pip;
use ;
/// A move that the current player may submit to [`crate::game::Game::act`].
///
/// The game phase determines which variant is valid:
/// - [`PlayerAction::Ask`] is valid only when the phase is
/// [`crate::game::GamePhase::WaitingForAsk`].
/// - [`PlayerAction::Draw`] is valid only when the phase is
/// [`crate::game::GamePhase::WaitingForDraw`].
///
/// # Examples
///
/// ```
/// use cardpack::prelude::{DeckedBase, Standard52};
/// use gfcore::prelude::PlayerAction;
///
/// let pile = Standard52::basic_pile();
/// let rank = pile.v()[0].rank;
///
/// let ask = PlayerAction::Ask { target: 2, rank };
/// assert!(matches!(ask, PlayerAction::Ask { target: 2, .. }));
///
/// let draw = PlayerAction::Draw;
/// assert_eq!(draw, PlayerAction::Draw);
/// ```