Parse PGN to Rust struct ( headers as hash map, main line moves as san, uci, fen, epd records ) or to JSON. All lichess variants are supported. Custom starting position using FEN header is supported.
```rust use pgnparse::parser::*;
fn main(){ let pgn = r#"[FEN "8/8/8/8/8/7k/8/7K w - - 0 1"] [White "White"] [Black "Black"] [Variant "Atomic"]
Kh2 Kg2 "#;
let result = parsepgntoruststruct(pgn.to_string());
println!("{:?}", result);
let result = parsepgntojsonstring(pgn.to_string());
println!("{}", result); } ```
prints
``` PgnInfo { headers: {"Variant": "Atomic", "White": "White", "Black": "Black", "FEN": "8/8/8/8/8/7k/8/7K w - - 0 1"}, moves: [SanUciFenEpd { san: "Kh2", uci: "h1h2", fenbefore: "8/8/8/8/8/7k/8/7K w - - 0 1", epdbefore: "8/8/8/8/8/7k/8/7K w - -", fenafter: "8/8/8/8/8/7k/7K/8 b - - 1 1", epdafter: "8/8/8/8/8/7k/7K/8 b - -" }, SanUciFenEpd { san: "Kg2", uci: "h3g2", fenbefore: "8/8/8/8/8/7k/7K/8 b - - 1 1", epdbefore: "8/8/8/8/8/7k/7K/8 b - -", fenafter: "8/8/8/8/8/8/6kK/8 w - - 2 2", epdafter: "8/8/8/8/8/8/6kK/8 w - -" }] } {"headers":{"Black":"Black","Variant":"Atomic","FEN":"8/8/8/8/8/7k/8/7K w - - 0 1","White":"White"},"moves":[{"san":"Kh2","uci":"h1h2","fenbefore":"8/8/8/8/8/7k/8/7K w - - 0 1","epdbefore":"8/8/8/8/8/7k/8/7K w - -","fenafter":"8/8/8/8/8/7k/7K/8 b - - 1 1","epdafter":"8/8/8/8/8/7k/7K/8 b - -"},{"san":"Kg2","uci":"h3g2","fenbefore":"8/8/8/8/8/7k/7K/8 b - - 1 1","epdbefore":"8/8/8/8/8/7k/7K/8 b - -","fenafter":"8/8/8/8/8/8/6kK/8 w - - 2 2","epdafter":"8/8/8/8/8/8/6kK/8 w - -"}]}
```