using System; using System.ComponentModel.DataAnnotations; // ReSharper disable UnusedMember.Global namespace Tapeti.DataAnnotations.Extensions { /// /// /// Can be used on Guid fields which are supposed to be Required, as the Required attribute does /// not work for Guids and making them Nullable is counter-intuitive. /// public class RequiredGuidAttribute : ValidationAttribute { private const string DefaultErrorMessage = "'{0}' does not contain a valid guid"; private const string InvalidTypeErrorMessage = "'{0}' is not of type Guid"; /// public RequiredGuidAttribute() : base(DefaultErrorMessage) { } /// protected override ValidationResult IsValid(object value, ValidationContext validationContext) { if (value == null) return new ValidationResult(FormatErrorMessage(validationContext.DisplayName)); if (value.GetType() != typeof(Guid)) return new ValidationResult(string.Format(InvalidTypeErrorMessage, validationContext.DisplayName)); var guid = (Guid)value; return guid == Guid.Empty ? new ValidationResult(FormatErrorMessage(validationContext.DisplayName)) : null; } } }