// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "UObject/Class.h" #include "UObject/UnrealType.h" #include "UObject/TextProperty.h" #include "UObject/NoExportTypes.h" #include "UObject/StrProperty.h" #include "UObject/EnumProperty.h" namespace UE::MovieScene { template concept CBaseStructureAccessible = requires() { TBaseStructure::Get(); }; template struct TPropertyMatch; template struct TVariantPropertyMatch { static bool SupportsProperty(const FProperty& InProperty) { if (const FStructProperty* StructProp = CastField(&InProperty)) { return StructProp->Struct == TVariantStructure::Get(); } return false; } }; template requires CBaseStructureAccessible struct TPropertyMatch { static bool SupportsProperty(const FProperty& InProperty) { if (const FStructProperty* StructProp = CastField(&InProperty)) { return StructProp->Struct == TBaseStructure::Get(); } return false; } }; template<> struct TPropertyMatch { static bool SupportsProperty(const FProperty& InProperty) { return InProperty.IsA(); } }; template<> struct TPropertyMatch { static bool SupportsProperty(const FProperty& InProperty) { return InProperty.IsA(); } }; template<> struct TPropertyMatch { static bool SupportsProperty(const FProperty& InProperty) { return InProperty.IsA(); } }; template<> struct TPropertyMatch { static bool SupportsProperty(const FProperty& InProperty) { return InProperty.IsA(); } }; template<> struct TPropertyMatch { static bool SupportsProperty(const FProperty& InProperty) { return InProperty.IsA(); } }; template<> struct TPropertyMatch { static bool SupportsProperty(const FProperty& InProperty) { return InProperty.IsA() || InProperty.IsA(); } }; template<> struct TPropertyMatch { static bool SupportsProperty(const FProperty& InProperty) { return InProperty.IsA(); } }; template<> struct TPropertyMatch { static bool SupportsProperty(const FProperty& InProperty) { return InProperty.IsA(); } }; template<> struct TPropertyMatch { static bool SupportsProperty(const FProperty& InProperty) { return InProperty.IsA(); } }; template<> struct TPropertyMatch { static bool SupportsProperty(const FProperty& InProperty) { return InProperty.IsA(); } }; template<> struct TPropertyMatch { static bool SupportsProperty(const FProperty& InProperty) { return InProperty.IsA(); } }; template<> struct TPropertyMatch : TVariantPropertyMatch { }; template<> struct TPropertyMatch : TVariantPropertyMatch { }; template<> struct TPropertyMatch : TVariantPropertyMatch { }; template<> struct TPropertyMatch { static bool SupportsProperty(const FProperty& InProperty) { if (const FStructProperty* StructProp = CastField(&InProperty)) { return StructProp->Struct == TBaseStructure::Get(); } return false; } }; template<> struct TPropertyMatch { static bool SupportsProperty(const FProperty& InProperty) { if (const FStructProperty* StructProp = CastField(&InProperty)) { return StructProp->Struct == TVariantStructure::Get() || StructProp->Struct == TBaseStructure::Get(); } return false; } }; template<> struct TPropertyMatch { static bool SupportsProperty(const FProperty& InProperty) { if (const FStructProperty* StructProp = CastField(&InProperty)) { return StructProp->Struct == TVariantStructure::Get() || StructProp->Struct == TBaseStructure::Get(); } return false; } }; } // UE::MovieScene