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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
//! A library for chess vocabulary and move generation.
//!
//! # Examples
//!
//! Generate legal moves in the starting position:
//!
//! ```
//! use shakmaty::{Chess, Position};
//!
//! let pos = Chess::default();
//! let legals = pos.legal_moves();
//! assert_eq!(legals.len(), 20);
//! ```
//!
//! Play moves:
//!
//! ```
//! # use shakmaty::{Chess, Position};
//! use shakmaty::{Square, Move, Role};
//! #
//! # let pos = Chess::default();
//!
//! // 1. e4
//! let pos = pos.play(Move::Normal {
//! role: Role::Pawn,
//! from: Square::E2,
//! to: Square::E4,
//! capture: None,
//! promotion: None,
//! })?;
//! # Ok::<_, shakmaty::PlayError<_>>(())
//! ```
//!
//! Detect game end conditions:
//!
//! ```
//! # use shakmaty::{Chess, Position, Outcome};
//! # let pos = Chess::default();
//! assert!(!pos.is_checkmate());
//! assert!(!pos.is_stalemate());
//! assert!(!pos.is_insufficient_material());
//! assert_eq!(pos.outcome(), Outcome::Unknown); // no winner yet
//! ```
//!
//! Also supports [FEN](fen), [SAN](san) and
//! [UCI](uci) formats for positions and moves.
//!
//! # Feature flags
//!
//! * `alloc`: Enables APIs which require the
//! [`alloc`](https://doc.rust-lang.org/stable/alloc/index.html) crate
//! (e.g. FEN string rendering).
//! * `std`: Implies `alloc`. Enabled by default.
//! For `no_std` environments, this must be disabled with `default-features = false`.
//! * `variant`: Enables support for all Lichess variants.
//! * `arbitrary`: Implements [`arbitrary::Arbitrary`](https://docs.rs/arbitrary/1/arbitrary/trait.Arbitrary.html)
//! for vocabulary types.
//! * `bincode`: Implements [`bincode`](https://docs.rs/bincode/2)
//! encoding/decoding for vocabulary types.
//!
//! Changing encodings is considered a semver breaking change and will be
//! noted in the changelog. But note that in such a case a migration
//! by unpacking with the previous version may be required.
//! * `serde`: Implements [`serde`](https://docs.rs/serde/1)
//! serialization/deserialization for types with unique natural
//! representations.
//! * `nohash-hasher`: Implements
//! [`nohash_hasher::IsEnabled`](https://docs.rs/nohash-hasher/0.2/nohash_hasher/trait.IsEnabled.html)
//! for sensible types.
//!
//! # Related crates
//!
//! * [shakmaty-syzygy](https://docs.rs/shakmaty-syzygy)
//! * [pgn-reader](https://docs.rs/pgn-reader)
extern crate alloc;
extern crate std;
pub use Bitboard;
pub use Board;
pub use ;
pub use ;
pub use ;
pub use perft;
pub use ;
pub use ;
pub use ;
pub use ;
pub use ;