use sashite_epin::{Identifier, Letter, Side, State};
use sashite_epin::sashite_pin::Identifier as Pin;
fn main() -> Result<(), sashite_epin::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!("derived : {}", king.is_derived());
println!("pin core : {}", king.pin().encode().as_str());
println!("as native : {}", king.native().encode().as_str());
println!("as derived : {}", king.derive().encode().as_str());
let flipped = king.with_pin(king.pin().flipped());
println!("flipped side : {flipped}");
let pin = Pin::new(
Letter::try_from_char('R')?,
Side::Second,
State::Enhanced,
false,
);
let rook = Identifier::new(pin, true);
println!("built : {rook} (a derived, promoted second-side rook)");
println!("is_valid \"r'\" : {}", Identifier::is_valid("r'"));
println!("is_valid \"K'^\" : {}", Identifier::is_valid("K'^"));
Ok(())
}