using Microsoft.FSharp.Core; using Websockets.ServiceModels.Types; using GameboardTypes = Gameboard.Shogi.Api.ServiceModels.Types; namespace Websockets.Managers.Utility { public static class Mapper { public static GameboardTypes.Move Map(Move source) { var from = source.From; var to = source.To; FSharpOption pieceFromCaptured = source.PieceFromCaptured switch { "B" => new FSharpOption(GameboardTypes.PieceName.Bishop), "G" => new FSharpOption(GameboardTypes.PieceName.GoldenGeneral), "K" => new FSharpOption(GameboardTypes.PieceName.King), "k" => new FSharpOption(GameboardTypes.PieceName.Knight), "L" => new FSharpOption(GameboardTypes.PieceName.Lance), "P" => new FSharpOption(GameboardTypes.PieceName.Pawn), "R" => new FSharpOption(GameboardTypes.PieceName.Rook), "S" => new FSharpOption(GameboardTypes.PieceName.SilverGeneral), _ => null }; var target = new GameboardTypes.Move { Origin = new GameboardTypes.BoardLocation { X = from.X, Y = from.Y }, Destination = new GameboardTypes.BoardLocation { X = to.X, Y = to.Y }, IsPromotion = source.IsPromotion, PieceFromCaptured = pieceFromCaptured }; return target; } public static Move Map(GameboardTypes.Move source) { var origin = source.Origin; var destination = source.Destination; string pieceFromCaptured = null; if (source.PieceFromCaptured != null) { pieceFromCaptured = source.PieceFromCaptured.Value switch { GameboardTypes.PieceName.Bishop => "B", GameboardTypes.PieceName.GoldenGeneral => "G", GameboardTypes.PieceName.King => "K", GameboardTypes.PieceName.Knight => "k", GameboardTypes.PieceName.Lance => "L", GameboardTypes.PieceName.Pawn => "P", GameboardTypes.PieceName.Rook => "R", GameboardTypes.PieceName.SilverGeneral => "S", _ => "" }; } var target = new Move { From = new Coords { X = origin.X, Y = origin.Y }, To = new Coords { X = destination.X, Y = destination.Y }, IsPromotion = source.IsPromotion, PieceFromCaptured = pieceFromCaptured }; return target; } } }