diff --git a/src/Persistence/PaYaml/Models/NamedObjectCollectionExtensions.cs b/src/Persistence/PaYaml/Models/NamedObjectCollectionExtensions.cs index c4d746be..d2b4b1b4 100644 --- a/src/Persistence/PaYaml/Models/NamedObjectCollectionExtensions.cs +++ b/src/Persistence/PaYaml/Models/NamedObjectCollectionExtensions.cs @@ -1,16 +1,28 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. +using System.Diagnostics.CodeAnalysis; +using System.Runtime.CompilerServices; + namespace Microsoft.PowerPlatform.PowerApps.Persistence.PaYaml.Models; public static class NamedObjectCollectionExtensions { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool IsNullOrEmpty([NotNullWhen(false)] this IReadOnlyNamedObjectCollection? collection) + where TValue : notnull + { + return collection is null || collection.Count == 0; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static NamedObjectMapping? EmptyToNull(this NamedObjectMapping? collection) where TValue : notnull { return collection?.Count == 0 ? null : collection; } + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static NamedObjectSequence? EmptyToNull(this NamedObjectSequence? collection) where TValue : notnull { diff --git a/src/Persistence/PaYaml/Models/SchemaV3/ComponentDefinition.cs b/src/Persistence/PaYaml/Models/SchemaV3/ComponentDefinition.cs index 84d239a1..36630500 100644 --- a/src/Persistence/PaYaml/Models/SchemaV3/ComponentDefinition.cs +++ b/src/Persistence/PaYaml/Models/SchemaV3/ComponentDefinition.cs @@ -8,12 +8,22 @@ namespace Microsoft.PowerPlatform.PowerApps.Persistence.PaYaml.Models.SchemaV3; public enum ComponentDefinitionType { + /// + /// Indicates a value which has either not been set or has been determined to be invalid. + /// + Invalid = 0, + CanvasComponent, CommandComponent, } public enum ComponentPropertyKind { + /// + /// Indicates a value which has either not been set or has been determined to be invalid. + /// + Invalid = 0, + Input, Output, InputFunction, @@ -58,7 +68,7 @@ public record ComponentDefinition : IPaControlInstanceContainer public abstract record ComponentCustomPropertyBase { [YamlMember(Order = -9, DefaultValuesHandling = DefaultValuesHandling.Preserve)] - public required ComponentPropertyKind PropertyKind { get; init; } + public required ComponentPropertyKind? PropertyKind { get; init; } [YamlMember(Order = -8)] public string? DisplayName { get; init; } @@ -90,7 +100,7 @@ public record ComponentCustomPropertyParameter() { public string? Description { get; init; } - public bool IsOptional { get; init; } + public bool? IsOptional { get; init; } public PaYamlPropertyDataType? DataType { get; init; } diff --git a/src/Persistence/PaYaml/Models/SchemaV3/ControlInstance.cs b/src/Persistence/PaYaml/Models/SchemaV3/ControlInstance.cs index 919e3162..6d3944bc 100644 --- a/src/Persistence/PaYaml/Models/SchemaV3/ControlInstance.cs +++ b/src/Persistence/PaYaml/Models/SchemaV3/ControlInstance.cs @@ -18,7 +18,7 @@ public ControlInstance(string controlType) } [property: YamlMember(Alias = "Control")] - public required string ControlType { get; init; } + public required string? ControlType { get; init; } public string? Variant { get; init; } diff --git a/src/Persistence/PaYaml/Models/SchemaV3/DataSourceInstance.cs b/src/Persistence/PaYaml/Models/SchemaV3/DataSourceInstance.cs index d74f5165..865dc5f4 100644 --- a/src/Persistence/PaYaml/Models/SchemaV3/DataSourceInstance.cs +++ b/src/Persistence/PaYaml/Models/SchemaV3/DataSourceInstance.cs @@ -13,7 +13,7 @@ public enum DataSourceType public record DataSourceInstance { [YamlMember(DefaultValuesHandling = DefaultValuesHandling.Preserve)] - public required DataSourceType Type { get; init; } + public required DataSourceType? Type { get; init; } public string? ConnectorId { get; init; } public NamedObjectMapping? Parameters { get; init; } } diff --git a/src/Persistence/PaYaml/Models/SchemaV3/PaModule.cs b/src/Persistence/PaYaml/Models/SchemaV3/PaModule.cs index b56469e7..4acff8f8 100644 --- a/src/Persistence/PaYaml/Models/SchemaV3/PaModule.cs +++ b/src/Persistence/PaYaml/Models/SchemaV3/PaModule.cs @@ -9,7 +9,10 @@ namespace Microsoft.PowerPlatform.PowerApps.Persistence.PaYaml.Models.SchemaV3; public record PaModule { public AppInstance? App { get; init; } - public NamedObjectMapping ComponentDefinitions { get; init; } = new(); - public NamedObjectMapping Screens { get; init; } = new(); - public NamedObjectMapping DataSources { get; init; } = new(); + + public NamedObjectMapping? ComponentDefinitions { get; init; } + + public NamedObjectMapping? Screens { get; init; } + + public NamedObjectMapping? DataSources { get; init; } } diff --git a/src/Persistence/PaYaml/Models/SchemaV3/PaYamlPropertyDataType.cs b/src/Persistence/PaYaml/Models/SchemaV3/PaYamlPropertyDataType.cs index c4595d35..c1589451 100644 --- a/src/Persistence/PaYaml/Models/SchemaV3/PaYamlPropertyDataType.cs +++ b/src/Persistence/PaYaml/Models/SchemaV3/PaYamlPropertyDataType.cs @@ -5,6 +5,11 @@ namespace Microsoft.PowerPlatform.PowerApps.Persistence.PaYaml.Models.SchemaV3; public enum PaYamlPropertyDataType { + /// + /// Indicates an data type which has either not been explicitly set or has been determined to be invalid. + /// + Invalid = 0, + /// /// aka Void. Only valid for function return types which are allowed to have side effects. ///