sgf-parser 2.6.0

A library for parsing SGF files
Documentation
#[cfg(test)]
mod sgf_files_test {
    use sgf_parser::{Encoding, GameTree, SgfToken};
    #[test]
    fn parse_sfg() {
        let _g = sgf_parser::parse(include_str!("sgf/ShusakuvsInseki.sgf")).unwrap();
    }

    #[test]
    fn parse_iso_marked_sfg() {
        use std::fs::File;
        use std::io::Read;
        let mut file = File::open("tests/sgf/ShusakuvsInseki-iso.sgf").unwrap();
        let mut content = vec![];
        let _ = file.read_to_end(&mut content);

        // convert ISO-8859-1 byte string to UTF-8
        let sgf_string: String = content.iter().map(|&c| c as char).collect();

        let iso_game = sgf_parser::parse(&sgf_string).unwrap();
        assert!(has_iso_node(&iso_game));
        assert!(!has_utf_node(&iso_game));

        let output: String = iso_game.into();

        let utf_game = sgf_parser::parse(&output).unwrap();
        assert!(!has_iso_node(&utf_game));
        assert!(has_utf_node(&utf_game));
    }

    fn has_iso_node(tree: &GameTree) -> bool {
        tree.nodes[0].tokens.iter().any(|token| match token {
            SgfToken::Charset(Encoding::Other(enc)) if enc == "ISO-8859" => true,
            _ => false,
        })
    }

    fn has_utf_node(tree: &GameTree) -> bool {
        tree.nodes[0].tokens.iter().any(|token| match token {
            SgfToken::Charset(Encoding::UTF8) => true,
            _ => false,
        })
    }

    #[test]
    fn parse_sgf_with_empty_node() {
        let _g = sgf_parser::parse(include_str!("sgf/empty_node.sgf")).unwrap();
    }
}