Current section
Files
Jump to
Current section
Files
src/move.gleam
import position.{type Position}
import piece.{type Piece}
import gleam/option.{type Option}
pub type Move {
Normal(
from: Position,
to: Position,
captured: Option(Piece),
promotion: Option(Piece),
)
Castle(from: Position, to: Position)
EnPassant(from: Position, to: Position)
}
pub fn to_string(move: Move) -> String {
let from = position.to_string(move.from)
let to = position.to_string(move.to)
let captured = case move {
Normal(_, _, option.None, option.None) -> ""
Normal(_, _, option.None, option.Some(promotion)) ->
" promoting to " <> piece.to_string(promotion)
Normal(_, _, option.Some(captured), option.None) ->
" capturing " <> piece.to_string(captured)
Normal(_, _, option.Some(captured), option.Some(promotion)) ->
" capturing " <> piece.to_string(captured) <> " and promoting to " <> piece.to_string(
promotion,
)
Castle(_, _) -> ""
EnPassant(_, _) -> ""
}
from <> " -> " <> to <> captured
}