src/Elastic.CommonSchema/PropDispatch.cs (156 lines of code) (raw):
// Licensed to Elasticsearch B.V under one or more agreements.
// Elasticsearch B.V licenses this file to you under the Apache 2.0 License.
// See the LICENSE file in the project root for more information
/*
IMPORTANT NOTE
==============
This file has been generated.
If you wish to submit a PR please modify the original csharp file and submit the PR with that change. Thanks!
*/
// ReSharper disable RedundantUsingDirective
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.Threading;
using System.Threading.Tasks;
using System.Linq;
using System.Net;
using System.Reflection;
using System.Runtime.Serialization;
using System.Text.Json.Serialization;
using System.Text.RegularExpressions;
using Elastic.CommonSchema.Serialization;
namespace Elastic.CommonSchema;
internal static partial class PropDispatch
{
public static void SetMetaOrLabel(EcsDocument document, string path, object value)
{
switch (value)
{
case string s:
document.Labels ??= new Labels();
document.Labels[path] = s;
break;
case bool b:
document.Labels ??= new Labels();
document.Labels[path] = b.ToString(CultureInfo.InvariantCulture).ToLowerInvariant();
break;
default:
document.Metadata ??= new MetadataDictionary();
document.Metadata[path] = value;
break;
}
}
private static bool TrySetLong<T>(T target, object value, Action<T, long> set)
{
if (!TrySetLong(value, out var b)) return false;
set(target, b);
return true;
}
private static bool TrySetLong(object value, out long l)
{
l = default;
switch (value)
{
case long ll:
l = ll;
return true;
case int i:
l = l = i;
return true;
case string s when long.TryParse(s, NumberStyles.None, CultureInfo.InvariantCulture, out var ll):
l = ll;
return true;
default:
return false;
}
}
private static bool TrySetFloat(object value, out float f)
{
f = default;
switch (value)
{
case float ff:
f = ff;
return true;
case long l:
f = Convert.ToSingle(l);
return true;
case int i:
f = Convert.ToSingle(i);
return true;
case string s when float.TryParse(s, NumberStyles.None, CultureInfo.InvariantCulture, out var ll):
f = ll;
return true;
default:
return false;
}
}
private static bool TrySetFloat<T>(T target, object value, Action<T, float> set)
{
if (!TrySetFloat(value, out var b)) return false;
set(target, b);
return true;
}
private static bool TrySetBool(object value, out bool b)
{
b = default;
switch (value)
{
case bool bb:
b = bb;
return true;
case string s when bool.TryParse(s, out var ll):
b = ll;
return true;
default:
return false;
}
}
private static bool TrySetBool<T>(T target, object value, Action<T, bool> set)
{
if (!TrySetBool(value, out var b)) return false;
set(target, b);
return true;
}
private static bool TrySetString<T>(T target, object value, Action<T, string> set)
{
if (!TrySetString(value, out var s) || s == null) return false;
set(target, s);
return true;
}
private static bool TrySetString(object value, out string? b)
{
b = value switch
{
string s => s,
_ => null
};
return b != null;
}
private static bool TrySetDateTimeOffset<T>(T target, object value, Action<T, DateTimeOffset> set)
{
if (!TrySetDateTimeOffset(value, out var d)) return false;
set(target, d);
return true;
}
private static bool TrySetDateTimeOffset(object value, out DateTimeOffset d)
{
d = default;
switch (value)
{
case long l:
d = DateTimeOffset.FromUnixTimeMilliseconds(l);
return true;
case int i:
d = DateTimeOffset.FromUnixTimeMilliseconds(i);
return true;
case DateTime dt:
d = new DateTimeOffset(dt);
return true;
case string s:
{
var formats = new[]
{
"yyyy-MM-ddTHH:mm:ss.FFFK",
"yyyy-MM-dd'T'HH:mm:ss.FFFK",
"yyyy-MM-dd'T'HH:mm:ss.ffffffK"
};
d = DateTimeOffset.ParseExact(s, formats, CultureInfo.InvariantCulture, DateTimeStyles.None);
return true;
}
default: return false;
}
}
}