in XForm/XForm/Types/String8TypeProvider.cs [44:124]
public NegatedTryConvert TryGetNegatedTryConvert(Type sourceType, Type targetType, object defaultValue)
{
// Build a converter for the set of types
if (targetType == typeof(String8))
{
if (sourceType == typeof(string)) return new StringToString8Converter(defaultValue).StringToString8;
if (sourceType == typeof(DateTime)) return new ToString8Converter<DateTime>(defaultValue, 20, String8.FromDateTime).Convert;
if (sourceType == typeof(bool)) return new ToString8Converter<bool>(defaultValue, 0, (value, buffer, index) => String8.FromBoolean(value)).Convert;
if (sourceType == typeof(TimeSpan)) return new ToString8Converter<TimeSpan>(defaultValue, 21, String8.FromTimeSpan).Convert;
if (sourceType == typeof(sbyte)) return new ToString8Converter<sbyte>(defaultValue, 4, (value, buffer, index) => String8.FromNumber(value, buffer, index)).Convert;
if (sourceType == typeof(byte)) return new ToString8Converter<byte>(defaultValue, 3, (value, buffer, index) => String8.FromNumber(value, buffer, index)).Convert;
if (sourceType == typeof(short)) return new ToString8Converter<short>(defaultValue, 6, (value, buffer, index) => String8.FromNumber(value, buffer, index)).Convert;
if (sourceType == typeof(ushort)) return new ToString8Converter<ushort>(defaultValue, 5, (value, buffer, index) => String8.FromNumber(value, buffer, index)).Convert;
if (sourceType == typeof(int)) return new ToString8Converter<int>(defaultValue, 11, (value, buffer, index) => String8.FromNumber(value, buffer, index)).Convert;
if (sourceType == typeof(uint)) return new ToString8Converter<uint>(defaultValue, 10, (value, buffer, index) => String8.FromNumber(value, buffer, index)).Convert;
if (sourceType == typeof(long)) return new ToString8Converter<long>(defaultValue, 21, (value, buffer, index) => String8.FromNumber(value, buffer, index)).Convert;
if (sourceType == typeof(ulong)) return new ToString8Converter<ulong>(defaultValue, 20, (value, buffer, index) => String8.FromNumber(value, false, buffer, index)).Convert;
if (sourceType == typeof(float)) return new ToString8Converter<float>(defaultValue, 21, (value, buffer, index) => String8.FromNumber(value, buffer, index)).Convert;
if (sourceType == typeof(double)) return new ToString8Converter<double>(defaultValue, 21, (value, buffer, index) => String8.FromNumber(value, buffer, index)).Convert;
}
else if (sourceType == typeof(String8))
{
if (targetType == typeof(int))
{
return new FromString8Converter<int>(defaultValue, (String8 value, out int result) => value.TryToInteger(out result)).Convert;
}
else if (targetType == typeof(uint))
{
return new FromString8Converter<uint>(defaultValue, (String8 value, out uint result) => value.TryToUInt(out result)).Convert;
}
else if (targetType == typeof(DateTime))
{
return new FromString8Converter<DateTime>(defaultValue, (String8 value, out DateTime result) => value.TryToDateTime(out result)).Convert;
}
else if (targetType == typeof(TimeSpan))
{
// Support TimeSpan conversions from .NET Format (DDD.HH:MM:SS.mmm) and 'friendly' format (24h, 7d)
return new FromString8Converter<TimeSpan>(defaultValue, (String8 value, out TimeSpan result) => value.TryToTimeSpanFriendly(out result)).Convert;
}
else if (targetType == typeof(bool))
{
return new FromString8Converter<bool>(defaultValue, (String8 value, out bool result) => value.TryToBoolean(out result)).Convert;
}
else if (targetType == typeof(long))
{
return new FromString8Converter<long>(defaultValue, (String8 value, out long result) => value.TryToLong(out result)).Convert;
}
else if (targetType == typeof(ulong))
{
return new FromString8Converter<ulong>(defaultValue, (String8 value, out ulong result) => value.TryToULong(out result)).Convert;
}
else if (targetType == typeof(ushort))
{
return new FromString8Converter<ushort>(defaultValue, (String8 value, out ushort result) => value.TryToUShort(out result)).Convert;
}
else if (targetType == typeof(short))
{
return new FromString8Converter<short>(defaultValue, (String8 value, out short result) => value.TryToShort(out result)).Convert;
}
else if (targetType == typeof(byte))
{
return new FromString8Converter<byte>(defaultValue, (String8 value, out byte result) => value.TryToByte(out result)).Convert;
}
else if (targetType == typeof(sbyte))
{
return new FromString8Converter<sbyte>(defaultValue, (String8 value, out sbyte result) => value.TryToSByte(out result)).Convert;
}
else if (targetType == typeof(double))
{
return new FromString8Converter<double>(defaultValue, (String8 value, out double result) => value.TryToDouble(out result)).Convert;
}
else if (targetType == typeof(float))
{
return new FromString8Converter<float>(defaultValue, (String8 value, out float result) => value.TryToFloat(out result)).Convert;
}
}
return null;
}