#parse-json #pgn #parse #json #hash-map #parser #rust

bin+lib pgnparse

将 PGN 解析为 Rust 结构体(标题作为哈希表,主线路动作为 san、uci、fen、epd 记录)或 JSON。支持所有 Lichess 变体。支持使用 FEN 标题进行自定义起始位置。

16 个版本

0.1.15 2021 年 1 月 21 日
0.1.14 2021 年 1 月 21 日

#2204解析器实现

50 每月下载
用于 2 crates

MITGPL-3.0+

27KB
632

documentation Crates.io Crates.io (recent)

pgnparse

将 PGN 解析为 Rust 结构体(标题作为哈希表,主线路动作为 san、uci、fen、epd 记录)或 JSON。支持所有 Lichess 变体。支持使用 FEN 标题进行自定义起始位置。创建解析的 pgns 图书。

用法

extern crate env_logger;

use pgnparse::parser::*;

use log::{info};

fn main(){
	env_logger::init();

	let pgn = r#"[FEN "8/8/8/8/8/7k/8/7K w - - 0 1"]
[White "White"]
[Black "Black"]
[Variant "Atomic"]

1. Kh2 Kg2
"#;

	info!("parsing pgn");
	
	let result = parse_pgn_to_rust_struct(pgn);
	
	println!("rust struct = {:?}", result);
	
	let result = parse_pgn_to_json_string(pgn);
	
	println!("json = {}", result);
}

高级

extern crate env_logger;

use pgnparse::parser::*;

fn main(){
	env_logger::init();

	let mut book = Book::new().me("chesshyperbot");

	book.parse("test.pgn");

	let pos = book.positions.get("rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq -");

	println!("pos for epd = {:?}", pos);

	if let Some(pos) = pos {
		let m = pos.get_random_weighted_by_plays();

		println!("random weighted by plays = {:?} , plays = {}", m, m.unwrap().plays());

		let m = pos.get_random_weighted_by_perf();

		println!("random weighted by perf = {:?} , perf = {}", m, m.unwrap().perf());

		let m = pos.get_random_mixed(50);

		println!("random mixed = {:?}", m);
	}
}

日志记录

export RUST_LOG=info
# or
export RUST_LOG=debug

依赖项

~5–15MB
~175K SLoC