using System; using System.Globalization; namespace Timeline.Services { /// /// Thrown when avatar is of bad format. /// [Serializable] public class AvatarFormatException : Exception { public enum ErrorReason { /// /// Decoding image failed. /// CantDecode, /// /// Decoding succeeded but the real type is not the specified type. /// UnmatchedFormat, /// /// Image is not a square. /// BadSize } public AvatarFormatException() : base(MakeMessage(null)) { } public AvatarFormatException(string message) : base(message) { } public AvatarFormatException(string message, Exception inner) : base(message, inner) { } public AvatarFormatException(Avatar avatar, ErrorReason error) : base(MakeMessage(error)) { Avatar = avatar; Error = error; } public AvatarFormatException(Avatar avatar, ErrorReason error, Exception inner) : base(MakeMessage(error), inner) { Avatar = avatar; Error = error; } protected AvatarFormatException( System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) : base(info, context) { } private static string MakeMessage(ErrorReason? reason) => string.Format(CultureInfo.InvariantCulture, Resources.Services.Exception.AvatarFormatException, reason switch { ErrorReason.CantDecode => Resources.Services.Exception.AvatarFormatExceptionCantDecode, ErrorReason.UnmatchedFormat => Resources.Services.Exception.AvatarFormatExceptionUnmatchedFormat, ErrorReason.BadSize => Resources.Services.Exception.AvatarFormatExceptionBadSize, _ => Resources.Services.Exception.AvatarFormatExceptionUnknownError }); public ErrorReason? Error { get; set; } public Avatar? Avatar { get; set; } } }