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