Files
LeafWeb/Core/Utility/ParseInfoAttribute.cs
T

49 lines
1.4 KiB
C#

using System;
using System.Linq;
using System.Runtime.CompilerServices;
namespace LeafWeb.Core.Utility
{
[AttributeUsage(AttributeTargets.Property)]
public class ParseInfoAttribute : Attribute
{
public int Position { get; private set; }
public int? BoolEncodedPosition { get; private set; }
public string Units { get; private set; }
public string Title { get; private set; }
public string AlternateTitle { get; private set; }
public string ExampleValue { get; private set; }
public string[] FieldNames
{
get
{
var fieldNames = new[] {Title, Title.SplitCamelCase()};
if (!string.IsNullOrEmpty(AlternateTitle))
fieldNames = fieldNames.Concat(new[] { AlternateTitle }).ToArray();
return fieldNames;
}
}
public ParseInfoAttribute(int position, [CallerMemberName]string title = null,
string units = null, string alternateTitle = null, string exampleValue = null,
int boolEncodedPosition = -1)
{
AlternateTitle = alternateTitle;
ExampleValue = exampleValue;
Title = title;
Position = position;
Units = units;
BoolEncodedPosition = boolEncodedPosition == -1 ? (int?)null : boolEncodedPosition;
}
public bool IsTitleMatch(string title)
{
return FieldNames.Any(t => string.Compare(title, t, StringComparison.InvariantCultureIgnoreCase) == 0);
}
public bool IsPositionMatch(int index)
{
return Position == index;
}
}
}