Trait BuildTraitGeneric <T>(Payload payload, PayloadBuilder builder) where T : struct { T value = payload.GetValue <T>(); Type runtimeType = PayloadUtilities.GenericArgumentTypeFromTagInterface( typeof(T)); return(InvokeGenericMethod(runtimeType, nameof(BuildTraitGenericPayload), value, builder)); }
public static Type FindTypeByPayloadArgumentType(Type payloadArgType) { if (k_PayloadArgTypeToTagType == null) { k_PayloadArgTypeToTagType = new Dictionary <string, Type>(); foreach (Type type in GetTypes()) { Type argType = PayloadUtilities.GenericArgumentTypeFromTagInterface(type); if (k_PayloadArgTypeToTagType.ContainsKey(argType.Name)) { // log error that two tag types have the same payload argument continue; } k_PayloadArgTypeToTagType.Add(argType.Name, type); } } k_PayloadArgTypeToTagType.TryGetValue(payloadArgType.FullName, out Type tagType); return(tagType); }
public static bool IsMarkerType(Type type) { Assert.IsTrue(type != null); return(HasMarkerAttribute(type) && PayloadUtilities.ImplementsPayloadInterface(type)); }