use sashite_pin::{Identifier, Letter, ParseError, Side, State};
fn main() -> Result<(), ParseError> {
let king = Identifier::parse("+K^")?;
println!("token : {king}");
println!(" letter : {}", king.letter().as_char());
println!(" side : {:?}", king.side());
println!(" state : {:?}", king.state());
println!(" terminal : {}", king.is_terminal());
println!(" is_first : {}", king.is_first());
println!(" is_enhanced : {}", king.is_enhanced());
let black = king.flipped();
let plain = king.normalized().with_terminal(false);
println!("flipped : {black}");
println!("normalized : {plain}");
let pawn = Identifier::new(
Letter::try_from_char('P')?,
Side::Second,
State::Enhanced,
false,
);
println!("built : {pawn} (a promoted second-side pawn)");
println!("is_valid(\"+r\"): {}", Identifier::is_valid("+r"));
println!("is_valid(\"K+\"): {}", Identifier::is_valid("K+"));
Ok(())
}