From a4a75188bd17e31b39a02511bbd6d628bab5c909 Mon Sep 17 00:00:00 2001 From: crupest Date: Sun, 25 Apr 2021 21:20:04 +0800 Subject: ... --- .../Timeline/Services/Imaging/ImageException.cs | 58 ++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 BackEnd/Timeline/Services/Imaging/ImageException.cs (limited to 'BackEnd/Timeline/Services/Imaging/ImageException.cs') diff --git a/BackEnd/Timeline/Services/Imaging/ImageException.cs b/BackEnd/Timeline/Services/Imaging/ImageException.cs new file mode 100644 index 00000000..926ecc0a --- /dev/null +++ b/BackEnd/Timeline/Services/Imaging/ImageException.cs @@ -0,0 +1,58 @@ +using System; +using System.Globalization; + +namespace Timeline.Services.Imaging +{ + [Serializable] + public class ImageException : Exception + { + public enum ErrorReason + { + /// + /// Decoding image failed. + /// + CantDecode, + /// + /// Decoding succeeded but the real type is not the specified type. + /// + UnmatchedFormat, + /// + /// Image is not of required size. + /// + NotSquare, + /// + /// Other unknown errer. + /// + Unknown + } + + public ImageException() : this(null) { } + public ImageException(string? message) : this(message, null) { } + public ImageException(string? message, Exception? inner) : this(ErrorReason.Unknown, null, null, null, message, inner) { } + + public ImageException(ErrorReason error, byte[]? data, string? requestType, string? realType, Exception? inner) : this(error, data, requestType, realType, null, inner) { } + public ImageException(ErrorReason error, byte[]? data, string? requestType = null, string? realType = null, string? message = null, Exception? inner = null) : base(message ?? MakeMessage(error), inner) { Error = error; ImageData = data; RequestType = requestType; RealType = realType; } + + protected ImageException( + System.Runtime.Serialization.SerializationInfo info, + System.Runtime.Serialization.StreamingContext context) : base(info, context) { } + + private static string MakeMessage(ErrorReason? reason) => + string.Format(CultureInfo.InvariantCulture, Resource.ExceptionImage, reason switch + { + ErrorReason.CantDecode => Resource.ExceptionImageReasonCantDecode, + ErrorReason.UnmatchedFormat => Resource.ExceptionImageReasonUnmatchedFormat, + ErrorReason.NotSquare => Resource.ExceptionImageReasonBadSize, + _ => Resource.ExceptionImageReasonUnknownError + }); + + public ErrorReason Error { get; } +#pragma warning disable CA1819 // Properties should not return arrays + public byte[]? ImageData { get; } +#pragma warning restore CA1819 // Properties should not return arrays + public string? RequestType { get; } + + // This field will be null if decoding failed. + public string? RealType { get; } + } +} -- cgit v1.2.3