87 lines
2.8 KiB
C#
87 lines
2.8 KiB
C#
using Shogi.Contracts.Types;
|
|
using DomainWhichPiece = Shogi.Domain.ValueObjects.WhichPiece;
|
|
using DomainWhichPlayer = Shogi.Domain.ValueObjects.WhichPlayer;
|
|
using Piece = Shogi.Contracts.Types.Piece;
|
|
|
|
namespace Shogi.Api.Managers
|
|
{
|
|
public class ModelMapper : IModelMapper
|
|
{
|
|
public WhichPlayer Map(DomainWhichPlayer whichPlayer)
|
|
{
|
|
return whichPlayer switch
|
|
{
|
|
DomainWhichPlayer.Player1 => WhichPlayer.Player1,
|
|
DomainWhichPlayer.Player2 => WhichPlayer.Player2,
|
|
_ => throw new ArgumentException("Unrecognized value for WhichPlayer", nameof(whichPlayer))
|
|
};
|
|
}
|
|
|
|
public WhichPlayer? Map(DomainWhichPlayer? whichPlayer)
|
|
{
|
|
return whichPlayer.HasValue
|
|
? Map(whichPlayer.Value)
|
|
: null;
|
|
}
|
|
|
|
public WhichPiece Map(DomainWhichPiece whichPiece)
|
|
{
|
|
return whichPiece switch
|
|
{
|
|
DomainWhichPiece.King => WhichPiece.King,
|
|
DomainWhichPiece.GoldGeneral => WhichPiece.GoldGeneral,
|
|
DomainWhichPiece.SilverGeneral => WhichPiece.SilverGeneral,
|
|
DomainWhichPiece.Bishop => WhichPiece.Bishop,
|
|
DomainWhichPiece.Rook => WhichPiece.Rook,
|
|
DomainWhichPiece.Knight => WhichPiece.Knight,
|
|
DomainWhichPiece.Lance => WhichPiece.Lance,
|
|
DomainWhichPiece.Pawn => WhichPiece.Pawn,
|
|
_ => throw new ArgumentException("Unrecognized value", nameof(whichPiece)),
|
|
};
|
|
}
|
|
|
|
public DomainWhichPiece Map(WhichPiece whichPiece)
|
|
{
|
|
return whichPiece switch
|
|
{
|
|
WhichPiece.King => DomainWhichPiece.King,
|
|
WhichPiece.GoldGeneral => DomainWhichPiece.GoldGeneral,
|
|
WhichPiece.SilverGeneral => DomainWhichPiece.SilverGeneral,
|
|
WhichPiece.Bishop => DomainWhichPiece.Bishop,
|
|
WhichPiece.Rook => DomainWhichPiece.Rook,
|
|
WhichPiece.Knight => DomainWhichPiece.Knight,
|
|
WhichPiece.Lance => DomainWhichPiece.Lance,
|
|
WhichPiece.Pawn => DomainWhichPiece.Pawn,
|
|
_ => throw new ArgumentException("Unrecognized value", nameof(whichPiece)),
|
|
};
|
|
}
|
|
|
|
public Piece Map(Domain.ValueObjects.Piece piece)
|
|
{
|
|
return new Piece { IsPromoted = piece.IsPromoted, Owner = Map(piece.Owner), WhichPiece = Map(piece.WhichPiece) };
|
|
}
|
|
|
|
public Dictionary<string, Piece?> Map(IDictionary<string, Domain.ValueObjects.Piece?> boardState)
|
|
{
|
|
return boardState.ToDictionary(kvp => kvp.Key.ToUpper(), kvp => MapNullable(kvp.Value));
|
|
}
|
|
|
|
public Piece? MapNullable(Domain.ValueObjects.Piece? piece)
|
|
{
|
|
if (piece == null) return null;
|
|
return Map(piece);
|
|
}
|
|
}
|
|
|
|
public interface IModelMapper
|
|
{
|
|
WhichPlayer Map(DomainWhichPlayer whichPlayer);
|
|
WhichPlayer? Map(DomainWhichPlayer? whichPlayer);
|
|
WhichPiece Map(DomainWhichPiece whichPiece);
|
|
DomainWhichPiece Map(WhichPiece value);
|
|
Piece Map(Domain.ValueObjects.Piece p);
|
|
Piece? MapNullable(Domain.ValueObjects.Piece? p);
|
|
Dictionary<string, Piece?> Map(IDictionary<string, Domain.ValueObjects.Piece?> boardState);
|
|
}
|
|
}
|