StructValueConverter<T>
using AngleSharp.Dom.Css;
using AngleSharp.Parser.Css;
using System;
using System.Collections.Generic;
using System.Globalization;
namespace AngleSharp.Css.ValueConverters
{
internal sealed class StructValueConverter<T> : IValueConverter where T : struct, IFormattable
{
private sealed class StructValue : IPropertyValue
{
private readonly T _value;
private readonly CssValue _original;
public string CssText => _value.ToString(null, CultureInfo.InvariantCulture);
public CssValue Original => _original;
public StructValue(T value, IEnumerable<CssToken> tokens)
{
_value = value;
_original = new CssValue(tokens);
}
public CssValue ExtractFor(string name)
{
return _original;
}
}
private readonly Func<IEnumerable<CssToken>, T?> _converter;
public StructValueConverter(Func<IEnumerable<CssToken>, T?> converter)
{
_converter = converter;
}
public IPropertyValue Convert(IEnumerable<CssToken> value)
{
T? nullable = _converter(value);
if (!nullable.HasValue)
return null;
return new StructValue(nullable.Value, value);
}
public IPropertyValue Construct(CssProperty[] properties)
{
return PropertyExtensions.Guard<StructValue>(properties);
}
}
}