Skip to content

Commit

Permalink
docs: update the usage (#17)
Browse files Browse the repository at this point in the history
  • Loading branch information
nozaq committed Dec 27, 2021
1 parent a52c64d commit 65555f0
Showing 1 changed file with 66 additions and 4 deletions.
70 changes: 66 additions & 4 deletions README.md
Expand Up @@ -6,14 +6,76 @@
[![docs.rs](https://docs.rs/csa/badge.svg)](https://docs.rs/csa)

A Shogi game serialization/deserialization library in CSA format.
CSA format is a plaintext format for recording Shogi games. This library supports parsing CSA-formatted string as well as composing CSA-formatted string from structs. Detail about CSA format is found at [here](http://www.computer-shogi.org/protocol/record_v22.html).

[Documentation](https://nozaq.github.io/csa-rs)
[Documentation](https://docs.rs/csa)

## Usage

```toml
[dependencies]
csa = "1.0"
Below is an example of parsing CSA-formatted string into structs.

```rust
use std::time::Duration;
use csa::{parse_csa, Action, Color, GameRecord, MoveRecord, PieceType, Square};

let csa_str = "\
V2.2
N+NAKAHARA
N-YONENAGA
$EVENT:13th World Computer Shogi Championship
PI
+
+2726FU
T12
";

let game = parse_csa(csa_str).expect("failed to parse the csa content");
assert_eq!(game.black_player, Some("NAKAHARA".to_string()));
assert_eq!(game.white_player, Some("YONENAGA".to_string()));
assert_eq!(game.event, Some("13th World Computer Shogi Championship".to_string()));
assert_eq!(game.moves[0], MoveRecord{
action: Action::Move(Color::Black, Square::new(2, 7), Square::new(2, 6), PieceType::Pawn),
time: Some(Duration::from_secs(12))
});
```

In contrast, structs can be composed into CSA-formatted string.

```rust
use std::time::Duration;
use csa::{ Action, Color, GameRecord, MoveRecord, PieceType, Square};

let mut g = GameRecord::default();
g.black_player = Some("NAKAHARA".to_string());
g.white_player = Some("YONENAGA".to_string());
g.event = Some("13th World Computer Shogi Championship".to_string());
g.moves.push(MoveRecord {
action: Action::Move(
Color::Black,
Square::new(2, 7),
Square::new(2, 6),
PieceType::Pawn,
),
time: Some(Duration::from_secs(5)),
});
g.moves.push(MoveRecord {
action: Action::Toryo,
time: None,
});

let csa_str = "\
V2.2
N+NAKAHARA
N-YONENAGA
$EVENT:13th World Computer Shogi Championship
PI
+
+2726FU
T5
%TORYO
";

assert_eq!(csa_str, g.to_string());
```

## License
Expand Down

0 comments on commit 65555f0

Please sign in to comment.