// Copyright (c) Microsoft Corporation. // Licensed under the MIT License. // OneOf is a class that is similar to C++ std::variant. // Due to the Winmdexp.exe we cannot name all cases of this class OneOf<...>. // It gives this error: error WME1065: Type names cannot differ only by case. namespace Microsoft.ReactNative.Managed { public struct OneOf1 { public OneOf1(T1 value) { Value = value; } public static implicit operator OneOf1(T1 value) => new OneOf1(value); public object Value { get; } public bool TryGet(out T value) { bool result = (Value != null && typeof(T) == Value.GetType()); value = result ? (T)Value : default(T); return result; } } public struct OneOf2 { public OneOf2(T1 value) { Value = value; } public OneOf2(T2 value) { Value = value; } public static implicit operator OneOf2(T1 value) => new OneOf2(value); public static implicit operator OneOf2(T2 value) => new OneOf2(value); public object Value { get; } public bool TryGet(out T value) { bool result = (Value != null && typeof(T) == Value.GetType()); value = result ? (T)Value : default(T); return result; } } public struct OneOf3 { public OneOf3(T1 value) { Value = value; } public OneOf3(T2 value) { Value = value; } public OneOf3(T3 value) { Value = value; } public static implicit operator OneOf3(T1 value) => new OneOf3(value); public static implicit operator OneOf3(T2 value) => new OneOf3(value); public static implicit operator OneOf3(T3 value) => new OneOf3(value); public object Value { get; } public bool TryGet(out T value) { bool result = (Value != null && typeof(T) == Value.GetType()); value = result ? (T)Value : default(T); return result; } } public struct OneOf4 { public OneOf4(T1 value) { Value = value; } public OneOf4(T2 value) { Value = value; } public OneOf4(T3 value) { Value = value; } public OneOf4(T4 value) { Value = value; } public static implicit operator OneOf4(T1 value) => new OneOf4(value); public static implicit operator OneOf4(T2 value) => new OneOf4(value); public static implicit operator OneOf4(T3 value) => new OneOf4(value); public static implicit operator OneOf4(T4 value) => new OneOf4(value); public object Value { get; } public bool TryGet(out T value) { bool result = (Value != null && typeof(T) == Value.GetType()); value = result ? (T)Value : default(T); return result; } } public struct OneOf5 { public OneOf5(T1 value) { Value = value; } public OneOf5(T2 value) { Value = value; } public OneOf5(T3 value) { Value = value; } public OneOf5(T4 value) { Value = value; } public OneOf5(T5 value) { Value = value; } public static implicit operator OneOf5(T1 value) => new OneOf5(value); public static implicit operator OneOf5(T2 value) => new OneOf5(value); public static implicit operator OneOf5(T3 value) => new OneOf5(value); public static implicit operator OneOf5(T4 value) => new OneOf5(value); public static implicit operator OneOf5(T5 value) => new OneOf5(value); public object Value { get; } public bool TryGet(out T value) { bool result = (Value != null && typeof(T) == Value.GetType()); value = result ? (T)Value : default(T); return result; } } public struct OneOf6 { public OneOf6(T1 value) { Value = value; } public OneOf6(T2 value) { Value = value; } public OneOf6(T3 value) { Value = value; } public OneOf6(T4 value) { Value = value; } public OneOf6(T5 value) { Value = value; } public OneOf6(T6 value) { Value = value; } public static implicit operator OneOf6(T1 value) => new OneOf6(value); public static implicit operator OneOf6(T2 value) => new OneOf6(value); public static implicit operator OneOf6(T3 value) => new OneOf6(value); public static implicit operator OneOf6(T4 value) => new OneOf6(value); public static implicit operator OneOf6(T5 value) => new OneOf6(value); public static implicit operator OneOf6(T6 value) => new OneOf6(value); public object Value { get; } public bool TryGet(out T value) { bool result = (Value != null && typeof(T) == Value.GetType()); value = result ? (T)Value : default(T); return result; } } public struct OneOf7 { public OneOf7(T1 value) { Value = value; } public OneOf7(T2 value) { Value = value; } public OneOf7(T3 value) { Value = value; } public OneOf7(T4 value) { Value = value; } public OneOf7(T5 value) { Value = value; } public OneOf7(T6 value) { Value = value; } public OneOf7(T7 value) { Value = value; } public static implicit operator OneOf7(T1 value) => new OneOf7(value); public static implicit operator OneOf7(T2 value) => new OneOf7(value); public static implicit operator OneOf7(T3 value) => new OneOf7(value); public static implicit operator OneOf7(T4 value) => new OneOf7(value); public static implicit operator OneOf7(T5 value) => new OneOf7(value); public static implicit operator OneOf7(T6 value) => new OneOf7(value); public static implicit operator OneOf7(T7 value) => new OneOf7(value); public object Value { get; } public bool TryGet(out T value) { bool result = (Value != null && typeof(T) == Value.GetType()); value = result ? (T)Value : default(T); return result; } } }