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
//! A foundation for Minesweeper implementations in Rust.
//!
//! The purpose of such a crate is to have Minesweeper implementations depend on a common crate, i.e. for them to share the basic code related to managing a Minesweeper session and only bother writing the code for the UI, sound effects, input and such. Such implementations can be seen as frontends to this library.
//!
//! # Feature gates
//! - `std` — enable a dependency on the hosted standard library (**enabled by default**)
//!
//!   Without this feature, the crate only depends on `core` and `alloc` (meaning that usage in an environment without even a memory allocator is impossible), allowing it to run in a freestanding environment, allowing one to implement Minesweeper on a microcontroller, meaning Arduino Minesweeper, ESP32 Minesweeper, OSDev Minesweeper... you name it.
//!
//! - `generation` — enable random generation (**enabled by default**)
//!
//!   Enables the dependency on `rand`, used for generating random fields. Disable to remove said dependency if you'd like to use your own random field generator.
//!
//! - `serialization` — enable support for field serialization (**enabled by default**, disable to speed up compilation)
//!
//!   Enables the dependency on `serde` and its derive macros, which allows one to serialize and deserialize a field to store it on the hard drive, send it over the network or otherwise perform a certain operation which requires having the field in a consistent (platform-independent) format. See the `serde` crate for more.
//!
//! - `track_caller` — use `track_caller` attributes
//!
//!   Places the `track_caller` attribute on indexing operators and other panicking methods, improving panic messages. **Requires a nightly compiler as of Rust 1.43.0**.

#![cfg_attr(feature = "track_caller", feature(track_caller))]
// Copypaste the following to enable this on specific methods:
//  #[cfg_attr(feature = "track_caller", track_caller)]

// Copypaste to derive Serde traits on specific methods:
// #[cfg_attr(feature = "serialization", derive(Serialize, Deserialize))]

#![cfg_attr(not(feature = "std"), no_std)]
extern crate alloc;

mod field;
pub use field::*;
pub mod iter;
pub use iter::*;
mod tile;
pub use tile::*;