pspulumiyaml.azurenative.eventgrid.psm1

using module @{ ModuleName = "PSPulumiYaml"; ModuleVersion = "0.0.3"; GUID = "909344e0-a08f-45f6-8177-80e36bb2ba58" }
function Invoke-AzureNativeFunctionEventgridGetDomainEventSubscriptionFullUrl
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Name of the domain topic.)')]
        [string]
        $domainName,
        [parameter(mandatory=$False,HelpMessage='Name of the event subscription.)')]
        [string]
        $eventSubscriptionName
    )

    process
    {
        $arguments = @{}
        $arguments["domainName"] = $domainName
        $arguments["eventSubscriptionName"] = $eventSubscriptionName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:eventgrid:getDomainEventSubscriptionFullUrl -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionEventgridGetPartnerTopicEventSubscriptionFullUrl
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the partner topic.)')]
        [string]
        $partnerTopicName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Name of the event subscription to be created. Event subscription names must be between 3 and 100 characters in length and use alphanumeric letters only.)')]
        [string]
        $eventSubscriptionName
    )

    process
    {
        $arguments = @{}
        $arguments["eventSubscriptionName"] = $eventSubscriptionName
        $arguments["partnerTopicName"] = $partnerTopicName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:eventgrid:getPartnerTopicEventSubscriptionFullUrl -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionEventgridGetDomainTopicEventSubscription
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the domain topic.)')]
        [string]
        $topicName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Name of the top level domain.)')]
        [string]
        $domainName,
        [parameter(mandatory=$False,HelpMessage='Name of the event subscription.)')]
        [string]
        $eventSubscriptionName
    )

    process
    {
        $arguments = @{}
        $arguments["domainName"] = $domainName
        $arguments["eventSubscriptionName"] = $eventSubscriptionName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["topicName"] = $topicName

        $functionObject = Invoke-PulumiFunction -Name azure-native:eventgrid:getDomainTopicEventSubscription -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionEventgridGetSystemTopic
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Name of the system topic.)')]
        [string]
        $systemTopicName
    )

    process
    {
        $arguments = @{}
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["systemTopicName"] = $systemTopicName

        $functionObject = Invoke-PulumiFunction -Name azure-native:eventgrid:getSystemTopic -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionEventgridGetSystemTopicEventSubscriptionDeliveryAttributes
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Name of the event subscription to be created. Event subscription names must be between 3 and 100 characters in length and use alphanumeric letters only.)')]
        [string]
        $eventSubscriptionName,
        [parameter(mandatory=$False,HelpMessage='Name of the system topic.)')]
        [string]
        $systemTopicName
    )

    process
    {
        $arguments = @{}
        $arguments["eventSubscriptionName"] = $eventSubscriptionName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["systemTopicName"] = $systemTopicName

        $functionObject = Invoke-PulumiFunction -Name azure-native:eventgrid:getSystemTopicEventSubscriptionDeliveryAttributes -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionEventgridGetDomainTopicEventSubscriptionFullUrl
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the domain topic.)')]
        [string]
        $topicName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Name of the top level domain.)')]
        [string]
        $domainName,
        [parameter(mandatory=$False,HelpMessage='Name of the event subscription.)')]
        [string]
        $eventSubscriptionName
    )

    process
    {
        $arguments = @{}
        $arguments["domainName"] = $domainName
        $arguments["eventSubscriptionName"] = $eventSubscriptionName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["topicName"] = $topicName

        $functionObject = Invoke-PulumiFunction -Name azure-native:eventgrid:getDomainTopicEventSubscriptionFullUrl -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionEventgridGetPartnerTopicEventSubscriptionDeliveryAttributes
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the partner topic.)')]
        [string]
        $partnerTopicName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Name of the event subscription to be created. Event subscription names must be between 3 and 100 characters in length and use alphanumeric letters only.)')]
        [string]
        $eventSubscriptionName
    )

    process
    {
        $arguments = @{}
        $arguments["eventSubscriptionName"] = $eventSubscriptionName
        $arguments["partnerTopicName"] = $partnerTopicName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:eventgrid:getPartnerTopicEventSubscriptionDeliveryAttributes -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionEventgridListPartnerNamespaceSharedAccessKeys
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the partner namespace.)')]
        [string]
        $partnerNamespaceName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription.)')]
        [string]
        $resourceGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["partnerNamespaceName"] = $partnerNamespaceName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:eventgrid:listPartnerNamespaceSharedAccessKeys -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionEventgridGetSystemTopicEventSubscription
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Name of the event subscription to be created. Event subscription names must be between 3 and 100 characters in length and use alphanumeric letters only.)')]
        [string]
        $eventSubscriptionName,
        [parameter(mandatory=$False,HelpMessage='Name of the system topic.)')]
        [string]
        $systemTopicName
    )

    process
    {
        $arguments = @{}
        $arguments["eventSubscriptionName"] = $eventSubscriptionName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["systemTopicName"] = $systemTopicName

        $functionObject = Invoke-PulumiFunction -Name azure-native:eventgrid:getSystemTopicEventSubscription -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionEventgridGetEventChannel
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Name of the partner namespace.)')]
        [string]
        $partnerNamespaceName,
        [parameter(mandatory=$False,HelpMessage='Name of the event channel.)')]
        [string]
        $eventChannelName
    )

    process
    {
        $arguments = @{}
        $arguments["eventChannelName"] = $eventChannelName
        $arguments["partnerNamespaceName"] = $partnerNamespaceName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:eventgrid:getEventChannel -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionEventgridGetTopicEventSubscriptionFullUrl
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Name of the domain topic.)')]
        [string]
        $topicName,
        [parameter(mandatory=$False,HelpMessage='Name of the event subscription.)')]
        [string]
        $eventSubscriptionName
    )

    process
    {
        $arguments = @{}
        $arguments["eventSubscriptionName"] = $eventSubscriptionName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["topicName"] = $topicName

        $functionObject = Invoke-PulumiFunction -Name azure-native:eventgrid:getTopicEventSubscriptionFullUrl -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionEventgridGetEventSubscriptionDeliveryAttributes
{
    param (
        [parameter(mandatory=$False,HelpMessage='The scope of the event subscription. The scope can be a subscription, or a resource group, or a top level resource belonging to a resource provider namespace, or an EventGrid topic. For example, use ''/subscriptions/{subscriptionId}/'' for a subscription, ''/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}'' for a resource group, and ''/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}'' for a resource, and ''/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/topics/{topicName}'' for an EventGrid topic.)')]
        [string]
        $scope,
        [parameter(mandatory=$False,HelpMessage='Name of the event subscription.)')]
        [string]
        $eventSubscriptionName
    )

    process
    {
        $arguments = @{}
        $arguments["eventSubscriptionName"] = $eventSubscriptionName
        $arguments["scope"] = $scope

        $functionObject = Invoke-PulumiFunction -Name azure-native:eventgrid:getEventSubscriptionDeliveryAttributes -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionEventgridGetPartnerConfiguration
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription.)')]
        [string]
        $resourceGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:eventgrid:getPartnerConfiguration -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionEventgridGetPartnerDestination
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Name of the partner destination.)')]
        [string]
        $partnerDestinationName
    )

    process
    {
        $arguments = @{}
        $arguments["partnerDestinationName"] = $partnerDestinationName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:eventgrid:getPartnerDestination -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionEventgridGetChannelFullUrl
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the partner namespace.)')]
        [string]
        $partnerNamespaceName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the partners subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Name of the Channel.)')]
        [string]
        $channelName
    )

    process
    {
        $arguments = @{}
        $arguments["channelName"] = $channelName
        $arguments["partnerNamespaceName"] = $partnerNamespaceName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:eventgrid:getChannelFullUrl -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionEventgridGetEventSubscription
{
    param (
        [parameter(mandatory=$False,HelpMessage='The scope of the event subscription. The scope can be a subscription, or a resource group, or a top level resource belonging to a resource provider namespace, or an EventGrid topic. For example, use ''/subscriptions/{subscriptionId}/'' for a subscription, ''/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}'' for a resource group, and ''/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}'' for a resource, and ''/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/topics/{topicName}'' for an EventGrid topic.)')]
        [string]
        $scope,
        [parameter(mandatory=$False,HelpMessage='Name of the event subscription.)')]
        [string]
        $eventSubscriptionName
    )

    process
    {
        $arguments = @{}
        $arguments["eventSubscriptionName"] = $eventSubscriptionName
        $arguments["scope"] = $scope

        $functionObject = Invoke-PulumiFunction -Name azure-native:eventgrid:getEventSubscription -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionEventgridGetDomainTopicEventSubscriptionDeliveryAttributes
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the domain topic.)')]
        [string]
        $topicName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Name of the top level domain.)')]
        [string]
        $domainName,
        [parameter(mandatory=$False,HelpMessage='Name of the event subscription.)')]
        [string]
        $eventSubscriptionName
    )

    process
    {
        $arguments = @{}
        $arguments["domainName"] = $domainName
        $arguments["eventSubscriptionName"] = $eventSubscriptionName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["topicName"] = $topicName

        $functionObject = Invoke-PulumiFunction -Name azure-native:eventgrid:getDomainTopicEventSubscriptionDeliveryAttributes -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionEventgridGetPartnerNamespace
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the partner namespace.)')]
        [string]
        $partnerNamespaceName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription.)')]
        [string]
        $resourceGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["partnerNamespaceName"] = $partnerNamespaceName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:eventgrid:getPartnerNamespace -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionEventgridGetDomainEventSubscriptionDeliveryAttributes
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Name of the domain topic.)')]
        [string]
        $domainName,
        [parameter(mandatory=$False,HelpMessage='Name of the event subscription.)')]
        [string]
        $eventSubscriptionName
    )

    process
    {
        $arguments = @{}
        $arguments["domainName"] = $domainName
        $arguments["eventSubscriptionName"] = $eventSubscriptionName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:eventgrid:getDomainEventSubscriptionDeliveryAttributes -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionEventgridGetTopicEventSubscription
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Name of the partner topic.)')]
        [string]
        $topicName,
        [parameter(mandatory=$False,HelpMessage='Name of the event subscription to be found. Event subscription names must be between 3 and 100 characters in length and use alphanumeric letters only.)')]
        [string]
        $eventSubscriptionName
    )

    process
    {
        $arguments = @{}
        $arguments["eventSubscriptionName"] = $eventSubscriptionName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["topicName"] = $topicName

        $functionObject = Invoke-PulumiFunction -Name azure-native:eventgrid:getTopicEventSubscription -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionEventgridGetDomainTopic
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Name of the domain.)')]
        [string]
        $domainName,
        [parameter(mandatory=$False,HelpMessage='Name of the topic.)')]
        [string]
        $domainTopicName
    )

    process
    {
        $arguments = @{}
        $arguments["domainName"] = $domainName
        $arguments["domainTopicName"] = $domainTopicName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:eventgrid:getDomainTopic -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionEventgridGetSystemTopicEventSubscriptionFullUrl
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Name of the event subscription to be created. Event subscription names must be between 3 and 100 characters in length and use alphanumeric letters only.)')]
        [string]
        $eventSubscriptionName,
        [parameter(mandatory=$False,HelpMessage='Name of the system topic.)')]
        [string]
        $systemTopicName
    )

    process
    {
        $arguments = @{}
        $arguments["eventSubscriptionName"] = $eventSubscriptionName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["systemTopicName"] = $systemTopicName

        $functionObject = Invoke-PulumiFunction -Name azure-native:eventgrid:getSystemTopicEventSubscriptionFullUrl -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionEventgridGetPartnerTopicEventSubscription
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the partner topic.)')]
        [string]
        $partnerTopicName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Name of the event subscription to be found. Event subscription names must be between 3 and 100 characters in length and use alphanumeric letters only.)')]
        [string]
        $eventSubscriptionName
    )

    process
    {
        $arguments = @{}
        $arguments["eventSubscriptionName"] = $eventSubscriptionName
        $arguments["partnerTopicName"] = $partnerTopicName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:eventgrid:getPartnerTopicEventSubscription -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionEventgridGetPartnerTopic
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Name of the partner topic.)')]
        [string]
        $partnerTopicName
    )

    process
    {
        $arguments = @{}
        $arguments["partnerTopicName"] = $partnerTopicName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:eventgrid:getPartnerTopic -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionEventgridListDomainSharedAccessKeys
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Name of the domain.)')]
        [string]
        $domainName
    )

    process
    {
        $arguments = @{}
        $arguments["domainName"] = $domainName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:eventgrid:listDomainSharedAccessKeys -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionEventgridGetEventSubscriptionFullUrl
{
    param (
        [parameter(mandatory=$False,HelpMessage='The scope of the event subscription. The scope can be a subscription, or a resource group, or a top level resource belonging to a resource provider namespace, or an EventGrid topic. For example, use ''/subscriptions/{subscriptionId}/'' for a subscription, ''/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}'' for a resource group, and ''/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}'' for a resource, and ''/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/topics/{topicName}'' for an EventGrid topic.)')]
        [string]
        $scope,
        [parameter(mandatory=$False,HelpMessage='Name of the event subscription.)')]
        [string]
        $eventSubscriptionName
    )

    process
    {
        $arguments = @{}
        $arguments["eventSubscriptionName"] = $eventSubscriptionName
        $arguments["scope"] = $scope

        $functionObject = Invoke-PulumiFunction -Name azure-native:eventgrid:getEventSubscriptionFullUrl -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionEventgridGetTopicEventSubscriptionDeliveryAttributes
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Name of the domain topic.)')]
        [string]
        $topicName,
        [parameter(mandatory=$False,HelpMessage='Name of the event subscription.)')]
        [string]
        $eventSubscriptionName
    )

    process
    {
        $arguments = @{}
        $arguments["eventSubscriptionName"] = $eventSubscriptionName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["topicName"] = $topicName

        $functionObject = Invoke-PulumiFunction -Name azure-native:eventgrid:getTopicEventSubscriptionDeliveryAttributes -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionEventgridGetPrivateEndpointConnection
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the parent resource (namely, either, the topic name or domain name).)')]
        [string]
        $parentName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The type of the parent resource. This can be either \''topics\'' or \''domains\''.)')]
        [string]
        $parentType,
        [parameter(mandatory=$False,HelpMessage='The name of the private endpoint connection connection.)')]
        [string]
        $privateEndpointConnectionName
    )

    process
    {
        $arguments = @{}
        $arguments["parentName"] = $parentName
        $arguments["parentType"] = $parentType
        $arguments["privateEndpointConnectionName"] = $privateEndpointConnectionName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:eventgrid:getPrivateEndpointConnection -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionEventgridListTopicSharedAccessKeys
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Name of the topic.)')]
        [string]
        $topicName
    )

    process
    {
        $arguments = @{}
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["topicName"] = $topicName

        $functionObject = Invoke-PulumiFunction -Name azure-native:eventgrid:listTopicSharedAccessKeys -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionEventgridGetTopic
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Name of the topic.)')]
        [string]
        $topicName
    )

    process
    {
        $arguments = @{}
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["topicName"] = $topicName

        $functionObject = Invoke-PulumiFunction -Name azure-native:eventgrid:getTopic -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionEventgridGetDomain
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Name of the domain.)')]
        [string]
        $domainName
    )

    process
    {
        $arguments = @{}
        $arguments["domainName"] = $domainName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:eventgrid:getDomain -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionEventgridGetDomainEventSubscription
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Name of the partner topic.)')]
        [string]
        $domainName,
        [parameter(mandatory=$False,HelpMessage='Name of the event subscription to be found. Event subscription names must be between 3 and 100 characters in length and use alphanumeric letters only.)')]
        [string]
        $eventSubscriptionName
    )

    process
    {
        $arguments = @{}
        $arguments["domainName"] = $domainName
        $arguments["eventSubscriptionName"] = $eventSubscriptionName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:eventgrid:getDomainEventSubscription -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionEventgridGetPartnerRegistration
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Name of the partner registration.)')]
        [string]
        $partnerRegistrationName
    )

    process
    {
        $arguments = @{}
        $arguments["partnerRegistrationName"] = $partnerRegistrationName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:eventgrid:getPartnerRegistration -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionEventgridGetChannel
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the partner namespace.)')]
        [string]
        $partnerNamespaceName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the partners subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Name of the channel.)')]
        [string]
        $channelName
    )

    process
    {
        $arguments = @{}
        $arguments["channelName"] = $channelName
        $arguments["partnerNamespaceName"] = $partnerNamespaceName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:eventgrid:getChannel -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
class JsonFieldWithDefault
{
    [string] $defaultValue
    [string] $sourceField
}
function New-AzureNativeTypeEventgridJsonFieldWithDefault
{
    param (
        [parameter(mandatory=$False,HelpMessage='The default value to be used for mapping when a SourceField is not provided or if there''s no property with the specified name in the published JSON event payload.)')]
        [string]
        $defaultValue,
        [parameter(mandatory=$False,HelpMessage='Name of a field in the input event schema that''s to be used as the source of a mapping.)')]
        [string]
        $sourceField
    )

    process
    {
        return $([JsonFieldWithDefault]$PSBoundParameters)
    }
}
class JsonField
{
    [string] $sourceField
}
function New-AzureNativeTypeEventgridJsonField
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of a field in the input event schema that''s to be used as the source of a mapping.)')]
        [string]
        $sourceField
    )

    process
    {
        return $([JsonField]$PSBoundParameters)
    }
}
class JsonInputSchemaMapping
{
    [JsonFieldWithDefault] $subject
    [JsonField] $id
    [string] $inputSchemaMappingType
    [JsonField] $topic
    [JsonFieldWithDefault] $eventType
    [JsonFieldWithDefault] $dataVersion
    [JsonField] $eventTime
}
function New-AzureNativeTypeEventgridJsonInputSchemaMapping
{
    param (
        [parameter(mandatory=$False,HelpMessage='The mapping information for the Subject property of the Event Grid Event.)')]
        [JsonFieldWithDefault]
        $subject,
        [parameter(mandatory=$False,HelpMessage='The mapping information for the Id property of the Event Grid Event.)')]
        [JsonField]
        $id,
        [parameter(mandatory=$False,HelpMessage='Type of the custom mapping
Expected value is ''Json''.)'
)]
        [string]
        $inputSchemaMappingType,
        [parameter(mandatory=$False,HelpMessage='The mapping information for the Topic property of the Event Grid Event.)')]
        [JsonField]
        $topic,
        [parameter(mandatory=$False,HelpMessage='The mapping information for the EventType property of the Event Grid Event.)')]
        [JsonFieldWithDefault]
        $eventType,
        [parameter(mandatory=$False,HelpMessage='The mapping information for the DataVersion property of the Event Grid Event.)')]
        [JsonFieldWithDefault]
        $dataVersion,
        [parameter(mandatory=$False,HelpMessage='The mapping information for the EventTime property of the Event Grid Event.)')]
        [JsonField]
        $eventTime
    )

    process
    {
        return $([JsonInputSchemaMapping]$PSBoundParameters)
    }
}
function New-AzureNativeEventgridDomain
{
    [Alias('azure_native_eventgrid_domain')]
    param (
        [parameter(mandatory=$False,HelpMessage='Tags of the resource.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Location of the resource.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='This determines if traffic is allowed over public network. By default it is enabled.
You can further restrict to specific IPs by configuring <seealso cref="P:Microsoft.Azure.Events.ResourceProvider.Common.Contracts.DomainProperties.InboundIpRules" />)'
)]
        [string]
        [ArgumentCompletions('Enabled', 'Disabled')]
        $publicNetworkAccess,
        [parameter(mandatory=$False,HelpMessage='This can be used to restrict traffic from specific IPs instead of all IPs. Note: These are considered only if PublicNetworkAccess is enabled.)')]
        $inboundIpRules,
        [parameter(mandatory=$False,HelpMessage='Name of the domain.)')]
        [string]
        $domainName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Information about the InputSchemaMapping which specified the info about mapping event payload.)')]
        [JsonInputSchemaMapping]
        $inputSchemaMapping,
        [parameter(mandatory=$False,HelpMessage='This determines the format that Event Grid should expect for incoming events published to the domain.)')]
        [string]
        [ArgumentCompletions('EventGridSchema', 'CustomEventSchema', 'CloudEventSchemaV1_0')]
        $inputSchema,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:eventgrid:Domain")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'publicNetworkAccess')
        {
            $resource.properties["publicNetworkAccess"] = $publicNetworkAccess
        }

        if($PSBoundParameters.Keys -icontains 'inboundIpRules')
        {
            $resource.properties["inboundIpRules"] = $inboundIpRules
        }

        if($PSBoundParameters.Keys -icontains 'domainName')
        {
            $resource.properties["domainName"] = $domainName
        }

        if($PSBoundParameters.Keys -icontains 'inputSchemaMapping')
        {
            $resource.properties["inputSchemaMapping"] = $inputSchemaMapping
        }

        if($PSBoundParameters.Keys -icontains 'inputSchema')
        {
            $resource.properties["inputSchema"] = $inputSchema
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class EventTypeInfo
{
    [ArgumentCompletions('Inline')]
    [string] $kind
    [object] $inlineEventTypes
}
class InlineEventProperties
{
    [string] $dataSchemaUrl
    [string] $documentationUrl
    [string] $description
}
function New-AzureNativeTypeEventgridInlineEventProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The dataSchemaUrl for the inline event.)')]
        [string]
        $dataSchemaUrl,
        [parameter(mandatory=$False,HelpMessage='The documentationUrl for the inline event.)')]
        [string]
        $documentationUrl,
        [parameter(mandatory=$False,HelpMessage='The description for the inline event.)')]
        [string]
        $description
    )

    process
    {
        return $([InlineEventProperties]$PSBoundParameters)
    }
}
function New-AzureNativeTypeEventgridEventTypeInfo
{
    param (
        [parameter(mandatory=$False,HelpMessage='The kind of event type used.)')]
        [string]
        [ArgumentCompletions('Inline')]
        $kind,
        [parameter(mandatory=$False,HelpMessage='A collection of inline event types for the resource. The inline event type keys are of type string which represents the name of the event.
An example of a valid inline event name is "Contoso.OrderCreated".
The inline event type values are of type InlineEventProperties and will contain additional information for every inline event type.)'
)]
        [InlineEventProperties]
        $inlineEventTypes
    )

    process
    {
        return $([EventTypeInfo]$PSBoundParameters)
    }
}
class PartnerTopicInfo
{
    [string] $name
    [EventTypeInfo] $eventTypeInfo
    [string] $resourceGroupName
    [string] $azureSubscriptionId
    [string] $source
}
function New-AzureNativeTypeEventgridPartnerTopicInfo
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the partner topic associated with the channel.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='Event Type Information for the partner topic. This information is provided by the publisher and can be used by the
subscriber to view different types of events that are published.)'
)]
        [EventTypeInfo]
        $eventTypeInfo,
        [parameter(mandatory=$False,HelpMessage='Azure Resource Group of the subscriber. The partner topic associated with the channel will be
created under this resource group.)'
)]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Azure subscription ID of the subscriber. The partner topic associated with the channel will be
created under this Azure subscription.)'
)]
        [string]
        $azureSubscriptionId,
        [parameter(mandatory=$False,HelpMessage='The source information is provided by the publisher to determine the scope or context from which the events
are originating. This information can be used by the subscriber during the approval process of the
created partner topic.)'
)]
        [string]
        $source
    )

    process
    {
        return $([PartnerTopicInfo]$PSBoundParameters)
    }
}
class ResourceMoveChangeHistory
{
    [string] $changedTimeUtc
    [string] $resourceGroupName
    [string] $azureSubscriptionId
}
function New-AzureNativeTypeEventgridResourceMoveChangeHistory
{
    param (
        [parameter(mandatory=$False,HelpMessage='UTC timestamp of when the resource was changed.)')]
        [string]
        $changedTimeUtc,
        [parameter(mandatory=$False,HelpMessage='Azure Resource Group of the resource.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Azure subscription ID of the resource.)')]
        [string]
        $azureSubscriptionId
    )

    process
    {
        return $([ResourceMoveChangeHistory]$PSBoundParameters)
    }
}
class AzureADPartnerClientAuthentication
{
    [string] $clientAuthenticationType
    [string] $azureActiveDirectoryApplicationIdOrUri
    [string] $azureActiveDirectoryTenantId
}
function New-AzureNativeTypeEventgridAzureADPartnerClientAuthentication
{
    param (
        [parameter(mandatory=$False,HelpMessage='Type of client authentication
Expected value is ''AzureAD''.)'
)]
        [string]
        $clientAuthenticationType,
        [parameter(mandatory=$False,HelpMessage='The Azure Active Directory Application ID or URI to get the access token that will be included as the bearer token in delivery requests.)')]
        [string]
        $azureActiveDirectoryApplicationIdOrUri,
        [parameter(mandatory=$False,HelpMessage='The Azure Active Directory Tenant ID to get the access token that will be included as the bearer token in delivery requests.)')]
        [string]
        $azureActiveDirectoryTenantId
    )

    process
    {
        return $([AzureADPartnerClientAuthentication]$PSBoundParameters)
    }
}
class WebhookPartnerDestinationInfo
{
    [string] $endpointUrl
    [ResourceMoveChangeHistory[]] $resourceMoveChangeHistory
    [AzureADPartnerClientAuthentication] $clientAuthentication
    [string] $resourceGroupName
    [string] $name
    [string] $azureSubscriptionId
    [string] $endpointServiceContext
    [string] $endpointBaseUrl
    [string] $endpointType
}
function New-AzureNativeTypeEventgridWebhookPartnerDestinationInfo
{
    param (
        [parameter(mandatory=$False,HelpMessage='The URL that represents the endpoint of the partner destination.)')]
        [string]
        $endpointUrl,
        [parameter(mandatory=$False,HelpMessage='Change history of the resource move.)')]
        $resourceMoveChangeHistory,
        [parameter(mandatory=$False,HelpMessage='Partner client authentication)')]
        [AzureADPartnerClientAuthentication]
        $clientAuthentication,
        [parameter(mandatory=$False,HelpMessage='Azure Resource Group of the subscriber. The partner destination associated with the channel will be
created under this resource group.)'
)]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Name of the partner destination associated with the channel.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='Azure subscription ID of the subscriber. The partner destination associated with the channel will be
created under this Azure subscription.)'
)]
        [string]
        $azureSubscriptionId,
        [parameter(mandatory=$False,HelpMessage='Additional context of the partner destination endpoint.)')]
        [string]
        $endpointServiceContext,
        [parameter(mandatory=$False,HelpMessage='The base URL that represents the endpoint of the partner destination.)')]
        [string]
        $endpointBaseUrl,
        [parameter(mandatory=$False,HelpMessage='Type of the endpoint for the partner destination
Expected value is ''WebHook''.)'
)]
        [string]
        $endpointType
    )

    process
    {
        return $([WebhookPartnerDestinationInfo]$PSBoundParameters)
    }
}
function New-AzureNativeEventgridChannel
{
    [Alias('azure_native_eventgrid_channel')]
    param (
        [parameter(mandatory=$False,HelpMessage='This property should be populated when channelType is PartnerTopic and represents information about the partner topic resource corresponding to the channel.)')]
        [PartnerTopicInfo]
        $partnerTopicInfo,
        [parameter(mandatory=$False,HelpMessage='Provisioning state of the channel.)')]
        [string]
        [ArgumentCompletions('Creating', 'Updating', 'Deleting', 'Succeeded', 'Canceled', 'Failed')]
        $provisioningState,
        [parameter(mandatory=$False,HelpMessage='Context or helpful message that can be used during the approval process by the subscriber.)')]
        [string]
        $messageForActivation,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the partners subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Name of the channel.)')]
        [string]
        $channelName,
        [parameter(mandatory=$False,HelpMessage='The type of the event channel which represents the direction flow of events.)')]
        [string]
        [ArgumentCompletions('PartnerTopic', 'PartnerDestination')]
        $channelType,
        [parameter(mandatory=$False,HelpMessage='Expiration time of the channel. If this timer expires while the corresponding partner topic is never activated,
the channel and corresponding partner topic are deleted.)'
)]
        [string]
        $expirationTimeIfNotActivatedUtc,
        [parameter(mandatory=$False,HelpMessage='The readiness state of the corresponding partner topic.)')]
        [string]
        [ArgumentCompletions('NeverActivated', 'Activated')]
        $readinessState,
        [parameter(mandatory=$False,HelpMessage='Name of the partner namespace.)')]
        [string]
        $partnerNamespaceName,
        [parameter(mandatory=$False,HelpMessage='This property should be populated when channelType is PartnerDestination and represents information about the partner destination resource corresponding to the channel.)')]
        [WebhookPartnerDestinationInfo]
        $partnerDestinationInfo,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:eventgrid:Channel")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["partnerNamespaceName"] = $partnerNamespaceName
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'partnerTopicInfo')
        {
            $resource.properties["partnerTopicInfo"] = $partnerTopicInfo
        }

        if($PSBoundParameters.Keys -icontains 'provisioningState')
        {
            $resource.properties["provisioningState"] = $provisioningState
        }

        if($PSBoundParameters.Keys -icontains 'messageForActivation')
        {
            $resource.properties["messageForActivation"] = $messageForActivation
        }

        if($PSBoundParameters.Keys -icontains 'channelName')
        {
            $resource.properties["channelName"] = $channelName
        }

        if($PSBoundParameters.Keys -icontains 'channelType')
        {
            $resource.properties["channelType"] = $channelType
        }

        if($PSBoundParameters.Keys -icontains 'expirationTimeIfNotActivatedUtc')
        {
            $resource.properties["expirationTimeIfNotActivatedUtc"] = $expirationTimeIfNotActivatedUtc
        }

        if($PSBoundParameters.Keys -icontains 'readinessState')
        {
            $resource.properties["readinessState"] = $readinessState
        }

        if($PSBoundParameters.Keys -icontains 'partnerDestinationInfo')
        {
            $resource.properties["partnerDestinationInfo"] = $partnerDestinationInfo
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeEventgridPartnerRegistration
{
    [Alias('azure_native_eventgrid_partnerregistration')]
    param (
        [parameter(mandatory=$False,HelpMessage='Tags of the resource.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Visibility state of the partner registration.)')]
        [string]
        [ArgumentCompletions('Hidden', 'PublicPreview', 'GenerallyAvailable')]
        $visibilityState,
        [parameter(mandatory=$False,HelpMessage='List of Azure subscription Ids that are authorized to create a partner namespace
associated with this partner registration. This is an optional property. Creating
partner namespaces is always permitted under the same Azure subscription as the one used
for creating the partner registration.)'
)]
        [string[]]
        $authorizedAzureSubscriptionIds,
        [parameter(mandatory=$False,HelpMessage='The customer service number of the publisher. The expected phone format should start with a ''+'' sign
followed by the country code. The remaining digits are then followed. Only digits and spaces are allowed and its
length cannot exceed 16 digits including country code. Examples of valid phone numbers are: +1 515 123 4567 and
+966 7 5115 2471. Examples of invalid phone numbers are: +1 (515) 123-4567, 1 515 123 4567 and +966 121 5115 24 7 551 1234 43)'
)]
        [string]
        $partnerCustomerServiceNumber,
        [parameter(mandatory=$False,HelpMessage='Long description for the custom scenarios and integration to be displayed in the portal if needed.
Length of this description should not exceed 2048 characters.)'
)]
        [string]
        $longDescription,
        [parameter(mandatory=$False,HelpMessage='Name of the partner resource type.)')]
        [string]
        $partnerResourceTypeName,
        [parameter(mandatory=$False,HelpMessage='Name of the partner registration.)')]
        [string]
        $partnerRegistrationName,
        [parameter(mandatory=$False,HelpMessage='Location of the resource.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='The extension of the customer service number of the publisher. Only digits are allowed and number of digits should not exceed 10.)')]
        [string]
        $partnerCustomerServiceExtension,
        [parameter(mandatory=$False,HelpMessage='URI of the partner website that can be used by Azure customers to setup Event Grid
integration on an event source.)'
)]
        [string]
        $setupUri,
        [parameter(mandatory=$False,HelpMessage='The extension of the customer service URI of the publisher.)')]
        [string]
        $customerServiceUri,
        [parameter(mandatory=$False,HelpMessage='Official name of the partner name. For example: "Contoso".)')]
        [string]
        $partnerName,
        [parameter(mandatory=$False,HelpMessage='Short description of the partner resource type. The length of this description should not exceed 256 characters.)')]
        [string]
        $partnerResourceTypeDescription,
        [parameter(mandatory=$False,HelpMessage='URI of the logo.)')]
        [string]
        $logoUri,
        [parameter(mandatory=$False,HelpMessage='Display name of the partner resource type.)')]
        [string]
        $partnerResourceTypeDisplayName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:eventgrid:PartnerRegistration")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'visibilityState')
        {
            $resource.properties["visibilityState"] = $visibilityState
        }

        if($PSBoundParameters.Keys -icontains 'authorizedAzureSubscriptionIds')
        {
            $resource.properties["authorizedAzureSubscriptionIds"] = $authorizedAzureSubscriptionIds
        }

        if($PSBoundParameters.Keys -icontains 'partnerCustomerServiceNumber')
        {
            $resource.properties["partnerCustomerServiceNumber"] = $partnerCustomerServiceNumber
        }

        if($PSBoundParameters.Keys -icontains 'longDescription')
        {
            $resource.properties["longDescription"] = $longDescription
        }

        if($PSBoundParameters.Keys -icontains 'partnerResourceTypeName')
        {
            $resource.properties["partnerResourceTypeName"] = $partnerResourceTypeName
        }

        if($PSBoundParameters.Keys -icontains 'partnerRegistrationName')
        {
            $resource.properties["partnerRegistrationName"] = $partnerRegistrationName
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'partnerCustomerServiceExtension')
        {
            $resource.properties["partnerCustomerServiceExtension"] = $partnerCustomerServiceExtension
        }

        if($PSBoundParameters.Keys -icontains 'setupUri')
        {
            $resource.properties["setupUri"] = $setupUri
        }

        if($PSBoundParameters.Keys -icontains 'customerServiceUri')
        {
            $resource.properties["customerServiceUri"] = $customerServiceUri
        }

        if($PSBoundParameters.Keys -icontains 'partnerName')
        {
            $resource.properties["partnerName"] = $partnerName
        }

        if($PSBoundParameters.Keys -icontains 'partnerResourceTypeDescription')
        {
            $resource.properties["partnerResourceTypeDescription"] = $partnerResourceTypeDescription
        }

        if($PSBoundParameters.Keys -icontains 'logoUri')
        {
            $resource.properties["logoUri"] = $logoUri
        }

        if($PSBoundParameters.Keys -icontains 'partnerResourceTypeDisplayName')
        {
            $resource.properties["partnerResourceTypeDisplayName"] = $partnerResourceTypeDisplayName
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class EventSubscriptionFilter
{
    [bool] $isSubjectCaseSensitive
    [string] $subjectEndsWith
    [string] $subjectBeginsWith
    [bool] $enableAdvancedFilteringOnArrays
    [object] $advancedFilters #todo add class here
    [string[]] $includedEventTypes
}
function New-AzureNativeTypeEventgridEventSubscriptionFilter
{
    param (
        [parameter(mandatory=$False,HelpMessage='Specifies if the SubjectBeginsWith and SubjectEndsWith properties of the filter
should be compared in a case sensitive manner.)'
)]
        [bool]
        $isSubjectCaseSensitive,
        [parameter(mandatory=$False,HelpMessage='An optional string to filter events for an event subscription based on a resource path suffix.
Wildcard characters are not supported in this path.)'
)]
        [string]
        $subjectEndsWith,
        [parameter(mandatory=$False,HelpMessage='An optional string to filter events for an event subscription based on a resource path prefix.
The format of this depends on the publisher of the events.
Wildcard characters are not supported in this path.)'
)]
        [string]
        $subjectBeginsWith,
        [parameter(mandatory=$False,HelpMessage='Allows advanced filters to be evaluated against an array of values instead of expecting a singular value.)')]
        [bool]
        $enableAdvancedFilteringOnArrays,
        [parameter(mandatory=$False,HelpMessage='An array of advanced filters that are used for filtering event subscriptions.)')]
        $advancedFilters,
        [parameter(mandatory=$False,HelpMessage='A list of applicable event types that need to be part of the event subscription. If it is desired to subscribe to all default event types, set the IncludedEventTypes to null.)')]
        [string[]]
        $includedEventTypes
    )

    process
    {
        return $([EventSubscriptionFilter]$PSBoundParameters)
    }
}
class StorageBlobDeadLetterDestination
{
    [string] $blobContainerName
    [string] $resourceId
    [string] $endpointType
}
function New-AzureNativeTypeEventgridStorageBlobDeadLetterDestination
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the Storage blob container that is the destination of the deadletter events)')]
        [string]
        $blobContainerName,
        [parameter(mandatory=$False,HelpMessage='The Azure Resource ID of the storage account that is the destination of the deadletter events)')]
        [string]
        $resourceId,
        [parameter(mandatory=$False,HelpMessage='Type of the endpoint for the dead letter destination
Expected value is ''StorageBlob''.)'
)]
        [string]
        $endpointType
    )

    process
    {
        return $([StorageBlobDeadLetterDestination]$PSBoundParameters)
    }
}
class WebHookEventSubscriptionDestination
{
    [int] $maxEventsPerBatch
    [string] $endpointType
    [string] $azureActiveDirectoryTenantId
    [int] $preferredBatchSizeInKilobytes
    [string] $azureActiveDirectoryApplicationIdOrUri
    [object] $deliveryAttributeMappings #todo add class here
    [string] $endpointUrl
}
function New-AzureNativeTypeEventgridWebHookEventSubscriptionDestination
{
    param (
        [parameter(mandatory=$False,HelpMessage='Maximum number of events per batch.)')]
        [int]
        $maxEventsPerBatch,
        [parameter(mandatory=$False,HelpMessage='Type of the endpoint for the event subscription destination.
Expected value is ''WebHook''.)'
)]
        [string]
        $endpointType,
        [parameter(mandatory=$False,HelpMessage='The Azure Active Directory Tenant ID to get the access token that will be included as the bearer token in delivery requests.)')]
        [string]
        $azureActiveDirectoryTenantId,
        [parameter(mandatory=$False,HelpMessage='Preferred batch size in Kilobytes.)')]
        [int]
        $preferredBatchSizeInKilobytes,
        [parameter(mandatory=$False,HelpMessage='The Azure Active Directory Application ID or URI to get the access token that will be included as the bearer token in delivery requests.)')]
        [string]
        $azureActiveDirectoryApplicationIdOrUri,
        [parameter(mandatory=$False,HelpMessage='Delivery attribute details.)')]
        $deliveryAttributeMappings,
        [parameter(mandatory=$False,HelpMessage='The URL that represents the endpoint of the destination of an event subscription.)')]
        [string]
        $endpointUrl
    )

    process
    {
        return $([WebHookEventSubscriptionDestination]$PSBoundParameters)
    }
}
class RetryPolicy
{
    [int] $eventTimeToLiveInMinutes
    [int] $maxDeliveryAttempts
}
function New-AzureNativeTypeEventgridRetryPolicy
{
    param (
        [parameter(mandatory=$False,HelpMessage='Time To Live (in minutes) for events.)')]
        [int]
        $eventTimeToLiveInMinutes,
        [parameter(mandatory=$False,HelpMessage='Maximum number of delivery retry attempts for events.)')]
        [int]
        $maxDeliveryAttempts
    )

    process
    {
        return $([RetryPolicy]$PSBoundParameters)
    }
}
function New-AzureNativeEventgridEventSubscription
{
    [Alias('azure_native_eventgrid_eventsubscription')]
    param (
        [parameter(mandatory=$False,HelpMessage='The event delivery schema for the event subscription.)')]
        [string]
        [ArgumentCompletions('EventGridSchema', 'CustomInputSchema', 'CloudEventSchemaV1_0')]
        $eventDeliverySchema,
        [parameter(mandatory=$False,HelpMessage='Information about the filter for the event subscription.)')]
        [EventSubscriptionFilter]
        $filter,
        [parameter(mandatory=$False,HelpMessage='The DeadLetter destination of the event subscription.)')]
        [StorageBlobDeadLetterDestination]
        $deadLetterDestination,
        [parameter(mandatory=$False,HelpMessage='The identifier of the resource to which the event subscription needs to be created or updated. The scope can be a subscription, or a resource group, or a top level resource belonging to a resource provider namespace, or an EventGrid topic. For example, use ''/subscriptions/{subscriptionId}/'' for a subscription, ''/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}'' for a resource group, and ''/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}'' for a resource, and ''/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/topics/{topicName}'' for an EventGrid topic.)')]
        [string]
        $scope,
        [parameter(mandatory=$False,HelpMessage='List of user defined labels.)')]
        [string[]]
        $labels,
        [parameter(mandatory=$False,HelpMessage='Expiration time of the event subscription.)')]
        [string]
        $expirationTimeUtc,
        [parameter(mandatory=$False,HelpMessage='Name of the event subscription. Event subscription names must be between 3 and 64 characters in length and should use alphanumeric letters only.)')]
        [string]
        $eventSubscriptionName,
        [parameter(mandatory=$False,HelpMessage='Information about the destination where events have to be delivered for the event subscription.)')]
        [WebHookEventSubscriptionDestination]
        $destination,
        [parameter(mandatory=$False,HelpMessage='The retry policy for events. This can be used to configure maximum number of delivery attempts and time to live for events.)')]
        [RetryPolicy]
        $retryPolicy,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:eventgrid:EventSubscription")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["scope"] = $scope

        if($PSBoundParameters.Keys -icontains 'eventDeliverySchema')
        {
            $resource.properties["eventDeliverySchema"] = $eventDeliverySchema
        }

        if($PSBoundParameters.Keys -icontains 'filter')
        {
            $resource.properties["filter"] = $filter
        }

        if($PSBoundParameters.Keys -icontains 'deadLetterDestination')
        {
            $resource.properties["deadLetterDestination"] = $deadLetterDestination
        }

        if($PSBoundParameters.Keys -icontains 'labels')
        {
            $resource.properties["labels"] = $labels
        }

        if($PSBoundParameters.Keys -icontains 'expirationTimeUtc')
        {
            $resource.properties["expirationTimeUtc"] = $expirationTimeUtc
        }

        if($PSBoundParameters.Keys -icontains 'eventSubscriptionName')
        {
            $resource.properties["eventSubscriptionName"] = $eventSubscriptionName
        }

        if($PSBoundParameters.Keys -icontains 'destination')
        {
            $resource.properties["destination"] = $destination
        }

        if($PSBoundParameters.Keys -icontains 'retryPolicy')
        {
            $resource.properties["retryPolicy"] = $retryPolicy
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class EventSubscriptionIdentity
{
    [ArgumentCompletions('SystemAssigned', 'UserAssigned')]
    [string] $type
    [string] $userAssignedIdentity
}
function New-AzureNativeTypeEventgridEventSubscriptionIdentity
{
    param (
        [parameter(mandatory=$False,HelpMessage='The type of managed identity used. The type ''SystemAssigned, UserAssigned'' includes both an implicitly created identity and a set of user-assigned identities. The type ''None'' will remove any identity.)')]
        [string]
        [ArgumentCompletions('SystemAssigned', 'UserAssigned')]
        $type,
        [parameter(mandatory=$False,HelpMessage='The user identity associated with the resource.)')]
        [string]
        $userAssignedIdentity
    )

    process
    {
        return $([EventSubscriptionIdentity]$PSBoundParameters)
    }
}
class DeadLetterWithResourceIdentity
{
    [StorageBlobDeadLetterDestination] $deadLetterDestination
    [EventSubscriptionIdentity] $identity
}
function New-AzureNativeTypeEventgridDeadLetterWithResourceIdentity
{
    param (
        [parameter(mandatory=$False,HelpMessage='Information about the destination where events have to be delivered for the event subscription.
Uses the managed identity setup on the parent resource (namely, topic or domain) to acquire the authentication tokens being used during delivery / dead-lettering.)'
)]
        [StorageBlobDeadLetterDestination]
        $deadLetterDestination,
        [parameter(mandatory=$False,HelpMessage='The identity to use when dead-lettering events.)')]
        [EventSubscriptionIdentity]
        $identity
    )

    process
    {
        return $([DeadLetterWithResourceIdentity]$PSBoundParameters)
    }
}
class DeliveryWithResourceIdentity
{
    [object] $destination #todo add class here
    [EventSubscriptionIdentity] $identity
}
function New-AzureNativeTypeEventgridDeliveryWithResourceIdentity
{
    param (
        [parameter(mandatory=$False,HelpMessage='Information about the destination where events have to be delivered for the event subscription.
Uses Azure Event Grid''s identity to acquire the authentication tokens being used during delivery / dead-lettering.)'
)]
        [WebHookEventSubscriptionDestination]
        $destination,
        [parameter(mandatory=$False,HelpMessage='The identity to use when delivering events.)')]
        [EventSubscriptionIdentity]
        $identity
    )

    process
    {
        return $([DeliveryWithResourceIdentity]$PSBoundParameters)
    }
}
function New-AzureNativeEventgridPartnerTopicEventSubscription
{
    [Alias('azure_native_eventgrid_partnertopiceventsubscription')]
    param (
        [parameter(mandatory=$False,HelpMessage='The retry policy for events. This can be used to configure maximum number of delivery attempts and time to live for events.)')]
        [RetryPolicy]
        $retryPolicy,
        [parameter(mandatory=$False,HelpMessage='The event delivery schema for the event subscription.)')]
        [string]
        [ArgumentCompletions('EventGridSchema', 'CustomInputSchema', 'CloudEventSchemaV1_0')]
        $eventDeliverySchema,
        [parameter(mandatory=$False,HelpMessage='Information about the filter for the event subscription.)')]
        [EventSubscriptionFilter]
        $filter,
        [parameter(mandatory=$False,HelpMessage='The dead letter destination of the event subscription. Any event that cannot be delivered to its'' destination is sent to the dead letter destination.
Uses Azure Event Grid''s identity to acquire the authentication tokens being used during delivery / dead-lettering.)'
)]
        [StorageBlobDeadLetterDestination]
        $deadLetterDestination,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='List of user defined labels.)')]
        [string[]]
        $labels,
        [parameter(mandatory=$False,HelpMessage='Expiration time of the event subscription.)')]
        [string]
        $expirationTimeUtc,
        [parameter(mandatory=$False,HelpMessage='The dead letter destination of the event subscription. Any event that cannot be delivered to its'' destination is sent to the dead letter destination.
Uses the managed identity setup on the parent resource (namely, topic or domain) to acquire the authentication tokens being used during delivery / dead-lettering.)'
)]
        [DeadLetterWithResourceIdentity]
        $deadLetterWithResourceIdentity,
        [parameter(mandatory=$False,HelpMessage='Information about the destination where events have to be delivered for the event subscription.
Uses the managed identity setup on the parent resource (namely, topic or domain) to acquire the authentication tokens being used during delivery / dead-lettering.)'
)]
        [DeliveryWithResourceIdentity]
        $deliveryWithResourceIdentity,
        [parameter(mandatory=$False,HelpMessage='Information about the destination where events have to be delivered for the event subscription.
Uses Azure Event Grid''s identity to acquire the authentication tokens being used during delivery / dead-lettering.)'
)]
        [WebHookEventSubscriptionDestination]
        $destination,
        [parameter(mandatory=$False,HelpMessage='Name of the partner topic.)')]
        [string]
        $partnerTopicName,
        [parameter(mandatory=$False,HelpMessage='Name of the event subscription to be created. Event subscription names must be between 3 and 100 characters in length and use alphanumeric letters only.)')]
        [string]
        $eventSubscriptionName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:eventgrid:PartnerTopicEventSubscription")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["partnerTopicName"] = $partnerTopicName
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'retryPolicy')
        {
            $resource.properties["retryPolicy"] = $retryPolicy
        }

        if($PSBoundParameters.Keys -icontains 'eventDeliverySchema')
        {
            $resource.properties["eventDeliverySchema"] = $eventDeliverySchema
        }

        if($PSBoundParameters.Keys -icontains 'filter')
        {
            $resource.properties["filter"] = $filter
        }

        if($PSBoundParameters.Keys -icontains 'deadLetterDestination')
        {
            $resource.properties["deadLetterDestination"] = $deadLetterDestination
        }

        if($PSBoundParameters.Keys -icontains 'labels')
        {
            $resource.properties["labels"] = $labels
        }

        if($PSBoundParameters.Keys -icontains 'expirationTimeUtc')
        {
            $resource.properties["expirationTimeUtc"] = $expirationTimeUtc
        }

        if($PSBoundParameters.Keys -icontains 'deadLetterWithResourceIdentity')
        {
            $resource.properties["deadLetterWithResourceIdentity"] = $deadLetterWithResourceIdentity
        }

        if($PSBoundParameters.Keys -icontains 'deliveryWithResourceIdentity')
        {
            $resource.properties["deliveryWithResourceIdentity"] = $deliveryWithResourceIdentity
        }

        if($PSBoundParameters.Keys -icontains 'destination')
        {
            $resource.properties["destination"] = $destination
        }

        if($PSBoundParameters.Keys -icontains 'eventSubscriptionName')
        {
            $resource.properties["eventSubscriptionName"] = $eventSubscriptionName
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeEventgridDomainTopicEventSubscription
{
    [Alias('azure_native_eventgrid_domaintopiceventsubscription')]
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the domain topic.)')]
        [string]
        $topicName,
        [parameter(mandatory=$False,HelpMessage='The dead letter destination of the event subscription. Any event that cannot be delivered to its'' destination is sent to the dead letter destination.
Uses Azure Event Grid''s identity to acquire the authentication tokens being used during delivery / dead-lettering.)'
)]
        [StorageBlobDeadLetterDestination]
        $deadLetterDestination,
        [parameter(mandatory=$False,HelpMessage='The dead letter destination of the event subscription. Any event that cannot be delivered to its'' destination is sent to the dead letter destination.
Uses the managed identity setup on the parent resource (namely, topic or domain) to acquire the authentication tokens being used during delivery / dead-lettering.)'
)]
        [DeadLetterWithResourceIdentity]
        $deadLetterWithResourceIdentity,
        [parameter(mandatory=$False,HelpMessage='Information about the destination where events have to be delivered for the event subscription.
Uses Azure Event Grid''s identity to acquire the authentication tokens being used during delivery / dead-lettering.)'
)]
        [WebHookEventSubscriptionDestination]
        $destination,
        [parameter(mandatory=$False,HelpMessage='Expiration time of the event subscription.)')]
        [string]
        $expirationTimeUtc,
        [parameter(mandatory=$False,HelpMessage='Information about the destination where events have to be delivered for the event subscription.
Uses the managed identity setup on the parent resource (namely, topic or domain) to acquire the authentication tokens being used during delivery / dead-lettering.)'
)]
        [DeliveryWithResourceIdentity]
        $deliveryWithResourceIdentity,
        [parameter(mandatory=$False,HelpMessage='The retry policy for events. This can be used to configure maximum number of delivery attempts and time to live for events.)')]
        [RetryPolicy]
        $retryPolicy,
        [parameter(mandatory=$False,HelpMessage='Name of the top level domain.)')]
        [string]
        $domainName,
        [parameter(mandatory=$False,HelpMessage='List of user defined labels.)')]
        [string[]]
        $labels,
        [parameter(mandatory=$False,HelpMessage='The event delivery schema for the event subscription.)')]
        [string]
        [ArgumentCompletions('EventGridSchema', 'CustomInputSchema', 'CloudEventSchemaV1_0')]
        $eventDeliverySchema,
        [parameter(mandatory=$False,HelpMessage='Information about the filter for the event subscription.)')]
        [EventSubscriptionFilter]
        $filter,
        [parameter(mandatory=$False,HelpMessage='Name of the event subscription to be created. Event subscription names must be between 3 and 100 characters in length and use alphanumeric letters only.)')]
        [string]
        $eventSubscriptionName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:eventgrid:DomainTopicEventSubscription")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["domainName"] = $domainName
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["topicName"] = $topicName

        if($PSBoundParameters.Keys -icontains 'deadLetterDestination')
        {
            $resource.properties["deadLetterDestination"] = $deadLetterDestination
        }

        if($PSBoundParameters.Keys -icontains 'deadLetterWithResourceIdentity')
        {
            $resource.properties["deadLetterWithResourceIdentity"] = $deadLetterWithResourceIdentity
        }

        if($PSBoundParameters.Keys -icontains 'destination')
        {
            $resource.properties["destination"] = $destination
        }

        if($PSBoundParameters.Keys -icontains 'expirationTimeUtc')
        {
            $resource.properties["expirationTimeUtc"] = $expirationTimeUtc
        }

        if($PSBoundParameters.Keys -icontains 'deliveryWithResourceIdentity')
        {
            $resource.properties["deliveryWithResourceIdentity"] = $deliveryWithResourceIdentity
        }

        if($PSBoundParameters.Keys -icontains 'retryPolicy')
        {
            $resource.properties["retryPolicy"] = $retryPolicy
        }

        if($PSBoundParameters.Keys -icontains 'labels')
        {
            $resource.properties["labels"] = $labels
        }

        if($PSBoundParameters.Keys -icontains 'eventDeliverySchema')
        {
            $resource.properties["eventDeliverySchema"] = $eventDeliverySchema
        }

        if($PSBoundParameters.Keys -icontains 'filter')
        {
            $resource.properties["filter"] = $filter
        }

        if($PSBoundParameters.Keys -icontains 'eventSubscriptionName')
        {
            $resource.properties["eventSubscriptionName"] = $eventSubscriptionName
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class EventChannelDestination
{
    [string] $partnerTopicName
    [string] $resourceGroup
    [string] $azureSubscriptionId
}
function New-AzureNativeTypeEventgridEventChannelDestination
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the partner topic associated with the event channel.)')]
        [string]
        $partnerTopicName,
        [parameter(mandatory=$False,HelpMessage='Azure Resource Group of the customer creating the event channel. The partner topic
associated with the event channel will be created under this resource group.)'
)]
        [string]
        $resourceGroup,
        [parameter(mandatory=$False,HelpMessage='Azure subscription ID of the customer creating the event channel. The partner topic
associated with the event channel will be created under this Azure subscription.)'
)]
        [string]
        $azureSubscriptionId
    )

    process
    {
        return $([EventChannelDestination]$PSBoundParameters)
    }
}
class EventChannelFilter
{
    [bool] $enableAdvancedFilteringOnArrays
    [object] $advancedFilters #todo add class here
}
function New-AzureNativeTypeEventgridEventChannelFilter
{
    param (
        [parameter(mandatory=$False,HelpMessage='Allows advanced filters to be evaluated against an array of values instead of expecting a singular value. The default value is either false or null.)')]
        [bool]
        $enableAdvancedFilteringOnArrays,
        [parameter(mandatory=$False,HelpMessage='An array of advanced filters that are used for filtering event channels.)')]
        $advancedFilters
    )

    process
    {
        return $([EventChannelFilter]$PSBoundParameters)
    }
}
class EventChannelSource
{
    [string] $source
}
function New-AzureNativeTypeEventgridEventChannelSource
{
    param (
        [parameter(mandatory=$False,HelpMessage='The identifier of the resource that''s the source of the events.
This represents a unique resource in the partner''s resource model.)'
)]
        [string]
        $source
    )

    process
    {
        return $([EventChannelSource]$PSBoundParameters)
    }
}
function New-AzureNativeEventgridEventChannel
{
    [Alias('azure_native_eventgrid_eventchannel')]
    param (
        [parameter(mandatory=$False,HelpMessage='Expiration time of the event channel. If this timer expires while the corresponding partner topic is never activated,
the event channel and corresponding partner topic are deleted.)'
)]
        [string]
        $expirationTimeIfNotActivatedUtc,
        [parameter(mandatory=$False,HelpMessage='Name of the event channel.)')]
        [string]
        $eventChannelName,
        [parameter(mandatory=$False,HelpMessage='Represents the destination of an event channel.)')]
        [EventChannelDestination]
        $destination,
        [parameter(mandatory=$False,HelpMessage='Friendly description about the topic. This can be set by the publisher/partner to show custom description for the customer partner topic.
This will be helpful to remove any ambiguity of the origin of creation of the partner topic for the customer.)'
)]
        [string]
        $partnerTopicFriendlyDescription,
        [parameter(mandatory=$False,HelpMessage='Information about the filter for the event channel.)')]
        [EventChannelFilter]
        $filter,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Source of the event channel. This represents a unique resource in the partner''s resource model.)')]
        [EventChannelSource]
        $source,
        [parameter(mandatory=$False,HelpMessage='Name of the partner namespace.)')]
        [string]
        $partnerNamespaceName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:eventgrid:EventChannel")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["partnerNamespaceName"] = $partnerNamespaceName
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'expirationTimeIfNotActivatedUtc')
        {
            $resource.properties["expirationTimeIfNotActivatedUtc"] = $expirationTimeIfNotActivatedUtc
        }

        if($PSBoundParameters.Keys -icontains 'eventChannelName')
        {
            $resource.properties["eventChannelName"] = $eventChannelName
        }

        if($PSBoundParameters.Keys -icontains 'destination')
        {
            $resource.properties["destination"] = $destination
        }

        if($PSBoundParameters.Keys -icontains 'partnerTopicFriendlyDescription')
        {
            $resource.properties["partnerTopicFriendlyDescription"] = $partnerTopicFriendlyDescription
        }

        if($PSBoundParameters.Keys -icontains 'filter')
        {
            $resource.properties["filter"] = $filter
        }

        if($PSBoundParameters.Keys -icontains 'source')
        {
            $resource.properties["source"] = $source
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeEventgridDomainEventSubscription
{
    [Alias('azure_native_eventgrid_domaineventsubscription')]
    param (
        [parameter(mandatory=$False,HelpMessage='The event delivery schema for the event subscription.)')]
        [string]
        [ArgumentCompletions('EventGridSchema', 'CustomInputSchema', 'CloudEventSchemaV1_0')]
        $eventDeliverySchema,
        [parameter(mandatory=$False,HelpMessage='Name of the domain topic.)')]
        [string]
        $domainName,
        [parameter(mandatory=$False,HelpMessage='Information about the filter for the event subscription.)')]
        [EventSubscriptionFilter]
        $filter,
        [parameter(mandatory=$False,HelpMessage='The dead letter destination of the event subscription. Any event that cannot be delivered to its'' destination is sent to the dead letter destination.
Uses Azure Event Grid''s identity to acquire the authentication tokens being used during delivery / dead-lettering.)'
)]
        [StorageBlobDeadLetterDestination]
        $deadLetterDestination,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='List of user defined labels.)')]
        [string[]]
        $labels,
        [parameter(mandatory=$False,HelpMessage='Expiration time of the event subscription.)')]
        [string]
        $expirationTimeUtc,
        [parameter(mandatory=$False,HelpMessage='The dead letter destination of the event subscription. Any event that cannot be delivered to its'' destination is sent to the dead letter destination.
Uses the managed identity setup on the parent resource (namely, topic or domain) to acquire the authentication tokens being used during delivery / dead-lettering.)'
)]
        [DeadLetterWithResourceIdentity]
        $deadLetterWithResourceIdentity,
        [parameter(mandatory=$False,HelpMessage='Information about the destination where events have to be delivered for the event subscription.
Uses the managed identity setup on the parent resource (namely, topic or domain) to acquire the authentication tokens being used during delivery / dead-lettering.)'
)]
        [DeliveryWithResourceIdentity]
        $deliveryWithResourceIdentity,
        [parameter(mandatory=$False,HelpMessage='Information about the destination where events have to be delivered for the event subscription.
Uses Azure Event Grid''s identity to acquire the authentication tokens being used during delivery / dead-lettering.)'
)]
        [WebHookEventSubscriptionDestination]
        $destination,
        [parameter(mandatory=$False,HelpMessage='The retry policy for events. This can be used to configure maximum number of delivery attempts and time to live for events.)')]
        [RetryPolicy]
        $retryPolicy,
        [parameter(mandatory=$False,HelpMessage='Name of the event subscription to be created. Event subscription names must be between 3 and 100 characters in length and use alphanumeric letters only.)')]
        [string]
        $eventSubscriptionName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:eventgrid:DomainEventSubscription")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["domainName"] = $domainName
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'eventDeliverySchema')
        {
            $resource.properties["eventDeliverySchema"] = $eventDeliverySchema
        }

        if($PSBoundParameters.Keys -icontains 'filter')
        {
            $resource.properties["filter"] = $filter
        }

        if($PSBoundParameters.Keys -icontains 'deadLetterDestination')
        {
            $resource.properties["deadLetterDestination"] = $deadLetterDestination
        }

        if($PSBoundParameters.Keys -icontains 'labels')
        {
            $resource.properties["labels"] = $labels
        }

        if($PSBoundParameters.Keys -icontains 'expirationTimeUtc')
        {
            $resource.properties["expirationTimeUtc"] = $expirationTimeUtc
        }

        if($PSBoundParameters.Keys -icontains 'deadLetterWithResourceIdentity')
        {
            $resource.properties["deadLetterWithResourceIdentity"] = $deadLetterWithResourceIdentity
        }

        if($PSBoundParameters.Keys -icontains 'deliveryWithResourceIdentity')
        {
            $resource.properties["deliveryWithResourceIdentity"] = $deliveryWithResourceIdentity
        }

        if($PSBoundParameters.Keys -icontains 'destination')
        {
            $resource.properties["destination"] = $destination
        }

        if($PSBoundParameters.Keys -icontains 'retryPolicy')
        {
            $resource.properties["retryPolicy"] = $retryPolicy
        }

        if($PSBoundParameters.Keys -icontains 'eventSubscriptionName')
        {
            $resource.properties["eventSubscriptionName"] = $eventSubscriptionName
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeEventgridPartnerDestination
{
    [Alias('azure_native_eventgrid_partnerdestination')]
    param (
        [parameter(mandatory=$False,HelpMessage='The immutable Id of the corresponding partner registration.)')]
        [string]
        $partnerRegistrationImmutableId,
        [parameter(mandatory=$False,HelpMessage='Tags of the resource.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Provisioning state of the partner destination.)')]
        [string]
        [ArgumentCompletions('Creating', 'Updating', 'Deleting', 'Succeeded', 'Canceled', 'Failed')]
        $provisioningState,
        [parameter(mandatory=$False,HelpMessage='Context or helpful message that can be used during the approval process.)')]
        [string]
        $messageForActivation,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Name of the partner destination.)')]
        [string]
        $partnerDestinationName,
        [parameter(mandatory=$False,HelpMessage='Endpoint context associated with this partner destination.)')]
        [string]
        $endpointServiceContext,
        [parameter(mandatory=$False,HelpMessage='Expiration time of the partner destination. If this timer expires and the partner destination was never activated,
the partner destination and corresponding channel are deleted.)'
)]
        [string]
        $expirationTimeIfNotActivatedUtc,
        [parameter(mandatory=$False,HelpMessage='Activation state of the partner destination.)')]
        [string]
        [ArgumentCompletions('NeverActivated', 'Activated')]
        $activationState,
        [parameter(mandatory=$False,HelpMessage='Endpoint Base URL of the partner destination)')]
        [string]
        $endpointBaseUrl,
        [parameter(mandatory=$False,HelpMessage='Location of the resource.)')]
        [string]
        $location,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:eventgrid:PartnerDestination")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'partnerRegistrationImmutableId')
        {
            $resource.properties["partnerRegistrationImmutableId"] = $partnerRegistrationImmutableId
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'provisioningState')
        {
            $resource.properties["provisioningState"] = $provisioningState
        }

        if($PSBoundParameters.Keys -icontains 'messageForActivation')
        {
            $resource.properties["messageForActivation"] = $messageForActivation
        }

        if($PSBoundParameters.Keys -icontains 'partnerDestinationName')
        {
            $resource.properties["partnerDestinationName"] = $partnerDestinationName
        }

        if($PSBoundParameters.Keys -icontains 'endpointServiceContext')
        {
            $resource.properties["endpointServiceContext"] = $endpointServiceContext
        }

        if($PSBoundParameters.Keys -icontains 'expirationTimeIfNotActivatedUtc')
        {
            $resource.properties["expirationTimeIfNotActivatedUtc"] = $expirationTimeIfNotActivatedUtc
        }

        if($PSBoundParameters.Keys -icontains 'activationState')
        {
            $resource.properties["activationState"] = $activationState
        }

        if($PSBoundParameters.Keys -icontains 'endpointBaseUrl')
        {
            $resource.properties["endpointBaseUrl"] = $endpointBaseUrl
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeEventgridSystemTopicEventSubscription
{
    [Alias('azure_native_eventgrid_systemtopiceventsubscription')]
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the system topic.)')]
        [string]
        $systemTopicName,
        [parameter(mandatory=$False,HelpMessage='The event delivery schema for the event subscription.)')]
        [string]
        [ArgumentCompletions('EventGridSchema', 'CustomInputSchema', 'CloudEventSchemaV1_0')]
        $eventDeliverySchema,
        [parameter(mandatory=$False,HelpMessage='Information about the filter for the event subscription.)')]
        [EventSubscriptionFilter]
        $filter,
        [parameter(mandatory=$False,HelpMessage='The dead letter destination of the event subscription. Any event that cannot be delivered to its'' destination is sent to the dead letter destination.
Uses Azure Event Grid''s identity to acquire the authentication tokens being used during delivery / dead-lettering.)'
)]
        [StorageBlobDeadLetterDestination]
        $deadLetterDestination,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='List of user defined labels.)')]
        [string[]]
        $labels,
        [parameter(mandatory=$False,HelpMessage='Expiration time of the event subscription.)')]
        [string]
        $expirationTimeUtc,
        [parameter(mandatory=$False,HelpMessage='The dead letter destination of the event subscription. Any event that cannot be delivered to its'' destination is sent to the dead letter destination.
Uses the managed identity setup on the parent resource (namely, topic or domain) to acquire the authentication tokens being used during delivery / dead-lettering.)'
)]
        [DeadLetterWithResourceIdentity]
        $deadLetterWithResourceIdentity,
        [parameter(mandatory=$False,HelpMessage='Information about the destination where events have to be delivered for the event subscription.
Uses the managed identity setup on the parent resource (namely, topic or domain) to acquire the authentication tokens being used during delivery / dead-lettering.)'
)]
        [DeliveryWithResourceIdentity]
        $deliveryWithResourceIdentity,
        [parameter(mandatory=$False,HelpMessage='Information about the destination where events have to be delivered for the event subscription.
Uses Azure Event Grid''s identity to acquire the authentication tokens being used during delivery / dead-lettering.)'
)]
        [WebHookEventSubscriptionDestination]
        $destination,
        [parameter(mandatory=$False,HelpMessage='The retry policy for events. This can be used to configure maximum number of delivery attempts and time to live for events.)')]
        [RetryPolicy]
        $retryPolicy,
        [parameter(mandatory=$False,HelpMessage='Name of the event subscription to be created. Event subscription names must be between 3 and 100 characters in length and use alphanumeric letters only.)')]
        [string]
        $eventSubscriptionName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:eventgrid:SystemTopicEventSubscription")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["systemTopicName"] = $systemTopicName

        if($PSBoundParameters.Keys -icontains 'eventDeliverySchema')
        {
            $resource.properties["eventDeliverySchema"] = $eventDeliverySchema
        }

        if($PSBoundParameters.Keys -icontains 'filter')
        {
            $resource.properties["filter"] = $filter
        }

        if($PSBoundParameters.Keys -icontains 'deadLetterDestination')
        {
            $resource.properties["deadLetterDestination"] = $deadLetterDestination
        }

        if($PSBoundParameters.Keys -icontains 'labels')
        {
            $resource.properties["labels"] = $labels
        }

        if($PSBoundParameters.Keys -icontains 'expirationTimeUtc')
        {
            $resource.properties["expirationTimeUtc"] = $expirationTimeUtc
        }

        if($PSBoundParameters.Keys -icontains 'deadLetterWithResourceIdentity')
        {
            $resource.properties["deadLetterWithResourceIdentity"] = $deadLetterWithResourceIdentity
        }

        if($PSBoundParameters.Keys -icontains 'deliveryWithResourceIdentity')
        {
            $resource.properties["deliveryWithResourceIdentity"] = $deliveryWithResourceIdentity
        }

        if($PSBoundParameters.Keys -icontains 'destination')
        {
            $resource.properties["destination"] = $destination
        }

        if($PSBoundParameters.Keys -icontains 'retryPolicy')
        {
            $resource.properties["retryPolicy"] = $retryPolicy
        }

        if($PSBoundParameters.Keys -icontains 'eventSubscriptionName')
        {
            $resource.properties["eventSubscriptionName"] = $eventSubscriptionName
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class IdentityInfo
{
    [string] $principalId
    [ArgumentCompletions('None', 'SystemAssigned', 'UserAssigned', 'SystemAssigned, UserAssigned')]
    [string] $type
    [string] $tenantId
    [object] $userAssignedIdentities
}
class UserIdentityProperties
{
    [string] $clientId
    [string] $principalId
}
function New-AzureNativeTypeEventgridUserIdentityProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The client id of user assigned identity.)')]
        [string]
        $clientId,
        [parameter(mandatory=$False,HelpMessage='The principal id of user assigned identity.)')]
        [string]
        $principalId
    )

    process
    {
        return $([UserIdentityProperties]$PSBoundParameters)
    }
}
function New-AzureNativeTypeEventgridIdentityInfo
{
    param (
        [parameter(mandatory=$False,HelpMessage='The principal ID of resource identity.)')]
        [string]
        $principalId,
        [parameter(mandatory=$False,HelpMessage='The type of managed identity used. The type ''SystemAssigned, UserAssigned'' includes both an implicitly created identity and a set of user-assigned identities. The type ''None'' will remove any identity.)')]
        [string]
        [ArgumentCompletions('None', 'SystemAssigned', 'UserAssigned', 'SystemAssigned, UserAssigned')]
        $type,
        [parameter(mandatory=$False,HelpMessage='The tenant ID of resource.)')]
        [string]
        $tenantId,
        [parameter(mandatory=$False,HelpMessage='The list of user identities associated with the resource. The user identity dictionary key references will be ARM resource ids in the form:
''/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}''.
This property is currently not used and reserved for future usage.)'
)]
        [UserIdentityProperties]
        $userAssignedIdentities
    )

    process
    {
        return $([IdentityInfo]$PSBoundParameters)
    }
}
function New-AzureNativeEventgridPartnerTopic
{
    [Alias('azure_native_eventgrid_partnertopic')]
    param (
        [parameter(mandatory=$False,HelpMessage='The immutableId of the corresponding partner registration.)')]
        [string]
        $partnerRegistrationImmutableId,
        [parameter(mandatory=$False,HelpMessage='Source associated with this partner topic. This represents a unique partner resource.)')]
        [string]
        $source,
        [parameter(mandatory=$False,HelpMessage='Tags of the resource.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Event Type information from the corresponding event channel.)')]
        [EventTypeInfo]
        $eventTypeInfo,
        [parameter(mandatory=$False,HelpMessage='Context or helpful message that can be used during the approval process by the subscriber.)')]
        [string]
        $messageForActivation,
        [parameter(mandatory=$False,HelpMessage='Friendly description about the topic. This can be set by the publisher/partner to show custom description for the customer partner topic.
This will be helpful to remove any ambiguity of the origin of creation of the partner topic for the customer.)'
)]
        [string]
        $partnerTopicFriendlyDescription,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Identity information for the Partner Topic resource.)')]
        [IdentityInfo]
        $identity,
        [parameter(mandatory=$False,HelpMessage='Expiration time of the partner topic. If this timer expires while the partner topic is still never activated,
the partner topic and corresponding event channel are deleted.)'
)]
        [string]
        $expirationTimeIfNotActivatedUtc,
        [parameter(mandatory=$False,HelpMessage='Activation state of the partner topic.)')]
        [string]
        [ArgumentCompletions('NeverActivated', 'Activated', 'Deactivated')]
        $activationState,
        [parameter(mandatory=$False,HelpMessage='Name of the partner topic.)')]
        [string]
        $partnerTopicName,
        [parameter(mandatory=$False,HelpMessage='Location of the resource.)')]
        [string]
        $location,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:eventgrid:PartnerTopic")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'partnerRegistrationImmutableId')
        {
            $resource.properties["partnerRegistrationImmutableId"] = $partnerRegistrationImmutableId
        }

        if($PSBoundParameters.Keys -icontains 'source')
        {
            $resource.properties["source"] = $source
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'eventTypeInfo')
        {
            $resource.properties["eventTypeInfo"] = $eventTypeInfo
        }

        if($PSBoundParameters.Keys -icontains 'messageForActivation')
        {
            $resource.properties["messageForActivation"] = $messageForActivation
        }

        if($PSBoundParameters.Keys -icontains 'partnerTopicFriendlyDescription')
        {
            $resource.properties["partnerTopicFriendlyDescription"] = $partnerTopicFriendlyDescription
        }

        if($PSBoundParameters.Keys -icontains 'identity')
        {
            $resource.properties["identity"] = $identity
        }

        if($PSBoundParameters.Keys -icontains 'expirationTimeIfNotActivatedUtc')
        {
            $resource.properties["expirationTimeIfNotActivatedUtc"] = $expirationTimeIfNotActivatedUtc
        }

        if($PSBoundParameters.Keys -icontains 'activationState')
        {
            $resource.properties["activationState"] = $activationState
        }

        if($PSBoundParameters.Keys -icontains 'partnerTopicName')
        {
            $resource.properties["partnerTopicName"] = $partnerTopicName
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class Partner
{
    [string] $partnerRegistrationImmutableId
    [string] $partnerName
    [string] $authorizationExpirationTimeInUtc
}
function New-AzureNativeTypeEventgridPartner
{
    param (
        [parameter(mandatory=$False,HelpMessage='The immutableId of the corresponding partner registration.)')]
        [string]
        $partnerRegistrationImmutableId,
        [parameter(mandatory=$False,HelpMessage='The partner name.)')]
        [string]
        $partnerName,
        [parameter(mandatory=$False,HelpMessage='Expiration time of the partner authorization. If this timer expires, any request from this partner to create, update or delete resources in subscriber''s
context will fail. If specified, the allowed values are between 1 to the value of defaultMaximumExpirationTimeInDays specified in PartnerConfiguration.
If not specified, the default value will be the value of defaultMaximumExpirationTimeInDays specified in PartnerConfiguration or 7 if this value is not specified.)'
)]
        [string]
        $authorizationExpirationTimeInUtc
    )

    process
    {
        return $([Partner]$PSBoundParameters)
    }
}
class PartnerAuthorization
{
    [int] $defaultMaximumExpirationTimeInDays
    [Partner[]] $authorizedPartnersList
}
function New-AzureNativeTypeEventgridPartnerAuthorization
{
    param (
        [parameter(mandatory=$False,HelpMessage='Time used to validate the authorization expiration time for each authorized partner. If DefaultMaximumExpirationTimeInDays is
not specified, the default is 7 days. Otherwise, allowed values are between 1 and 365 days.)'
)]
        [int]
        $defaultMaximumExpirationTimeInDays,
        [parameter(mandatory=$False,HelpMessage='The list of authorized partners.)')]
        $authorizedPartnersList
    )

    process
    {
        return $([PartnerAuthorization]$PSBoundParameters)
    }
}
function New-AzureNativeEventgridPartnerConfiguration
{
    [Alias('azure_native_eventgrid_partnerconfiguration')]
    param (
        [parameter(mandatory=$False,HelpMessage='Location of the resource.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='Provisioning state of the partner configuration.)')]
        [string]
        [ArgumentCompletions('Creating', 'Updating', 'Deleting', 'Succeeded', 'Canceled', 'Failed')]
        $provisioningState,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The details of authorized partners.)')]
        [PartnerAuthorization]
        $partnerAuthorization,
        [parameter(mandatory=$False,HelpMessage='Tags of the resource.)')]
        [hashtable]
        $tags,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:eventgrid:PartnerConfiguration")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'provisioningState')
        {
            $resource.properties["provisioningState"] = $provisioningState
        }

        if($PSBoundParameters.Keys -icontains 'partnerAuthorization')
        {
            $resource.properties["partnerAuthorization"] = $partnerAuthorization
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeEventgridSystemTopic
{
    [Alias('azure_native_eventgrid_systemtopic')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Identity information for the resource.)')]
        [IdentityInfo]
        $identity,
        [parameter(mandatory=$False,HelpMessage='Location of the resource.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='Name of the system topic.)')]
        [string]
        $systemTopicName,
        [parameter(mandatory=$False,HelpMessage='Tags of the resource.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='TopicType for the system topic.)')]
        [string]
        $topicType,
        [parameter(mandatory=$False,HelpMessage='Source for the system topic.)')]
        [string]
        $source,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:eventgrid:SystemTopic")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'identity')
        {
            $resource.properties["identity"] = $identity
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'systemTopicName')
        {
            $resource.properties["systemTopicName"] = $systemTopicName
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'topicType')
        {
            $resource.properties["topicType"] = $topicType
        }

        if($PSBoundParameters.Keys -icontains 'source')
        {
            $resource.properties["source"] = $source
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeEventgridPartnerNamespace
{
    [Alias('azure_native_eventgrid_partnernamespace')]
    param (
        [parameter(mandatory=$False,HelpMessage='Tags of the resource.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Location of the resource.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='The fully qualified ARM Id of the partner registration that should be associated with this partner namespace. This takes the following format:
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/partnerRegistrations/{partnerRegistrationName}.)'
)]
        [string]
        $partnerRegistrationFullyQualifiedId,
        [parameter(mandatory=$False,HelpMessage='This can be used to restrict traffic from specific IPs instead of all IPs. Note: These are considered only if PublicNetworkAccess is enabled.)')]
        $inboundIpRules,
        [parameter(mandatory=$False,HelpMessage='This boolean is used to enable or disable local auth. Default value is false. When the property is set to true, only AAD token will be used to authenticate if user is allowed to publish to the partner namespace.)')]
        [bool]
        $disableLocalAuth,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='This determines if traffic is allowed over public network. By default it is enabled.
You can further restrict to specific IPs by configuring <seealso cref="P:Microsoft.Azure.Events.ResourceProvider.Common.Contracts.PartnerNamespaceProperties.InboundIpRules" />)'
)]
        [string]
        [ArgumentCompletions('Enabled', 'Disabled')]
        $publicNetworkAccess,
        [parameter(mandatory=$False,HelpMessage='Name of the partner namespace.)')]
        [string]
        $partnerNamespaceName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:eventgrid:PartnerNamespace")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'partnerRegistrationFullyQualifiedId')
        {
            $resource.properties["partnerRegistrationFullyQualifiedId"] = $partnerRegistrationFullyQualifiedId
        }

        if($PSBoundParameters.Keys -icontains 'inboundIpRules')
        {
            $resource.properties["inboundIpRules"] = $inboundIpRules
        }

        if($PSBoundParameters.Keys -icontains 'disableLocalAuth')
        {
            $resource.properties["disableLocalAuth"] = $disableLocalAuth
        }

        if($PSBoundParameters.Keys -icontains 'publicNetworkAccess')
        {
            $resource.properties["publicNetworkAccess"] = $publicNetworkAccess
        }

        if($PSBoundParameters.Keys -icontains 'partnerNamespaceName')
        {
            $resource.properties["partnerNamespaceName"] = $partnerNamespaceName
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeEventgridTopicEventSubscription
{
    [Alias('azure_native_eventgrid_topiceventsubscription')]
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the domain topic.)')]
        [string]
        $topicName,
        [parameter(mandatory=$False,HelpMessage='The event delivery schema for the event subscription.)')]
        [string]
        [ArgumentCompletions('EventGridSchema', 'CustomInputSchema', 'CloudEventSchemaV1_0')]
        $eventDeliverySchema,
        [parameter(mandatory=$False,HelpMessage='Information about the filter for the event subscription.)')]
        [EventSubscriptionFilter]
        $filter,
        [parameter(mandatory=$False,HelpMessage='The dead letter destination of the event subscription. Any event that cannot be delivered to its'' destination is sent to the dead letter destination.
Uses Azure Event Grid''s identity to acquire the authentication tokens being used during delivery / dead-lettering.)'
)]
        [StorageBlobDeadLetterDestination]
        $deadLetterDestination,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='List of user defined labels.)')]
        [string[]]
        $labels,
        [parameter(mandatory=$False,HelpMessage='Expiration time of the event subscription.)')]
        [string]
        $expirationTimeUtc,
        [parameter(mandatory=$False,HelpMessage='The dead letter destination of the event subscription. Any event that cannot be delivered to its'' destination is sent to the dead letter destination.
Uses the managed identity setup on the parent resource (namely, topic or domain) to acquire the authentication tokens being used during delivery / dead-lettering.)'
)]
        [DeadLetterWithResourceIdentity]
        $deadLetterWithResourceIdentity,
        [parameter(mandatory=$False,HelpMessage='Information about the destination where events have to be delivered for the event subscription.
Uses the managed identity setup on the parent resource (namely, topic or domain) to acquire the authentication tokens being used during delivery / dead-lettering.)'
)]
        [DeliveryWithResourceIdentity]
        $deliveryWithResourceIdentity,
        [parameter(mandatory=$False,HelpMessage='Information about the destination where events have to be delivered for the event subscription.
Uses Azure Event Grid''s identity to acquire the authentication tokens being used during delivery / dead-lettering.)'
)]
        [WebHookEventSubscriptionDestination]
        $destination,
        [parameter(mandatory=$False,HelpMessage='The retry policy for events. This can be used to configure maximum number of delivery attempts and time to live for events.)')]
        [RetryPolicy]
        $retryPolicy,
        [parameter(mandatory=$False,HelpMessage='Name of the event subscription to be created. Event subscription names must be between 3 and 100 characters in length and use alphanumeric letters only.)')]
        [string]
        $eventSubscriptionName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:eventgrid:TopicEventSubscription")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["topicName"] = $topicName

        if($PSBoundParameters.Keys -icontains 'eventDeliverySchema')
        {
            $resource.properties["eventDeliverySchema"] = $eventDeliverySchema
        }

        if($PSBoundParameters.Keys -icontains 'filter')
        {
            $resource.properties["filter"] = $filter
        }

        if($PSBoundParameters.Keys -icontains 'deadLetterDestination')
        {
            $resource.properties["deadLetterDestination"] = $deadLetterDestination
        }

        if($PSBoundParameters.Keys -icontains 'labels')
        {
            $resource.properties["labels"] = $labels
        }

        if($PSBoundParameters.Keys -icontains 'expirationTimeUtc')
        {
            $resource.properties["expirationTimeUtc"] = $expirationTimeUtc
        }

        if($PSBoundParameters.Keys -icontains 'deadLetterWithResourceIdentity')
        {
            $resource.properties["deadLetterWithResourceIdentity"] = $deadLetterWithResourceIdentity
        }

        if($PSBoundParameters.Keys -icontains 'deliveryWithResourceIdentity')
        {
            $resource.properties["deliveryWithResourceIdentity"] = $deliveryWithResourceIdentity
        }

        if($PSBoundParameters.Keys -icontains 'destination')
        {
            $resource.properties["destination"] = $destination
        }

        if($PSBoundParameters.Keys -icontains 'retryPolicy')
        {
            $resource.properties["retryPolicy"] = $retryPolicy
        }

        if($PSBoundParameters.Keys -icontains 'eventSubscriptionName')
        {
            $resource.properties["eventSubscriptionName"] = $eventSubscriptionName
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class PrivateEndpoint
{
    [string] $id
}
function New-AzureNativeTypeEventgridPrivateEndpoint
{
    param (
        [parameter(mandatory=$False,HelpMessage='The ARM identifier for Private Endpoint.)')]
        [string]
        $id
    )

    process
    {
        return $([PrivateEndpoint]$PSBoundParameters)
    }
}
class ConnectionState
{
    [string] $description
    [ArgumentCompletions('Pending', 'Approved', 'Rejected', 'Disconnected')]
    [string] $status
    [string] $actionsRequired
}
function New-AzureNativeTypeEventgridConnectionState
{
    param (
        [parameter(mandatory=$False,HelpMessage='Description of the connection state.)')]
        [string]
        $description,
        [parameter(mandatory=$False,HelpMessage='Status of the connection.)')]
        [string]
        [ArgumentCompletions('Pending', 'Approved', 'Rejected', 'Disconnected')]
        $status,
        [parameter(mandatory=$False,HelpMessage='Actions required (if any).)')]
        [string]
        $actionsRequired
    )

    process
    {
        return $([ConnectionState]$PSBoundParameters)
    }
}
function New-AzureNativeEventgridPrivateEndpointConnection
{
    [Alias('azure_native_eventgrid_privateendpointconnection')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the private endpoint connection connection.)')]
        [string]
        $privateEndpointConnectionName,
        [parameter(mandatory=$False,HelpMessage='Provisioning state of the Private Endpoint Connection.)')]
        [string]
        [ArgumentCompletions('Creating', 'Updating', 'Deleting', 'Succeeded', 'Canceled', 'Failed')]
        $provisioningState,
        [parameter(mandatory=$False,HelpMessage='The Private Endpoint resource for this Connection.)')]
        [PrivateEndpoint]
        $privateEndpoint,
        [parameter(mandatory=$False,HelpMessage='GroupIds from the private link service resource.)')]
        [string[]]
        $groupIds,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the parent resource (namely, either, the topic name or domain name).)')]
        [string]
        $parentName,
        [parameter(mandatory=$False,HelpMessage='Details about the state of the connection.)')]
        [ConnectionState]
        $privateLinkServiceConnectionState,
        [parameter(mandatory=$False,HelpMessage='The type of the parent resource. This can be either \''topics\'' or \''domains\''.)')]
        [string]
        $parentType,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:eventgrid:PrivateEndpointConnection")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["parentName"] = $parentName
        $resource.properties["parentType"] = $parentType
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'privateEndpointConnectionName')
        {
            $resource.properties["privateEndpointConnectionName"] = $privateEndpointConnectionName
        }

        if($PSBoundParameters.Keys -icontains 'provisioningState')
        {
            $resource.properties["provisioningState"] = $provisioningState
        }

        if($PSBoundParameters.Keys -icontains 'privateEndpoint')
        {
            $resource.properties["privateEndpoint"] = $privateEndpoint
        }

        if($PSBoundParameters.Keys -icontains 'groupIds')
        {
            $resource.properties["groupIds"] = $groupIds
        }

        if($PSBoundParameters.Keys -icontains 'privateLinkServiceConnectionState')
        {
            $resource.properties["privateLinkServiceConnectionState"] = $privateLinkServiceConnectionState
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeEventgridTopic
{
    [Alias('azure_native_eventgrid_topic')]
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the topic.)')]
        [string]
        $topicName,
        [parameter(mandatory=$False,HelpMessage='Location of the resource.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='Tags of the resource.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='This can be used to restrict traffic from specific IPs instead of all IPs. Note: These are considered only if PublicNetworkAccess is enabled.)')]
        $inboundIpRules,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='This enables publishing using custom event schemas. An InputSchemaMapping can be specified to map various properties of a source schema to various required properties of the EventGridEvent schema.)')]
        [JsonInputSchemaMapping]
        $inputSchemaMapping,
        [parameter(mandatory=$False,HelpMessage='This determines the format that Event Grid should expect for incoming events published to the topic.)')]
        [string]
        [ArgumentCompletions('EventGridSchema', 'CustomEventSchema', 'CloudEventSchemaV1_0')]
        $inputSchema,
        [parameter(mandatory=$False,HelpMessage='This determines if traffic is allowed over public network. By default it is enabled.
You can further restrict to specific IPs by configuring <seealso cref="P:Microsoft.Azure.Events.ResourceProvider.Common.Contracts.TopicProperties.InboundIpRules" />)'
)]
        [string]
        [ArgumentCompletions('Enabled', 'Disabled')]
        $publicNetworkAccess,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:eventgrid:Topic")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'topicName')
        {
            $resource.properties["topicName"] = $topicName
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'inboundIpRules')
        {
            $resource.properties["inboundIpRules"] = $inboundIpRules
        }

        if($PSBoundParameters.Keys -icontains 'inputSchemaMapping')
        {
            $resource.properties["inputSchemaMapping"] = $inputSchemaMapping
        }

        if($PSBoundParameters.Keys -icontains 'inputSchema')
        {
            $resource.properties["inputSchema"] = $inputSchema
        }

        if($PSBoundParameters.Keys -icontains 'publicNetworkAccess')
        {
            $resource.properties["publicNetworkAccess"] = $publicNetworkAccess
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeEventgridDomainTopic
{
    [Alias('azure_native_eventgrid_domaintopic')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Name of the domain.)')]
        [string]
        $domainName,
        [parameter(mandatory=$False,HelpMessage='Name of the domain topic.)')]
        [string]
        $domainTopicName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:eventgrid:DomainTopic")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["domainName"] = $domainName
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'domainTopicName')
        {
            $resource.properties["domainTopicName"] = $domainTopicName
        }

        $global:pulumiresources += $resource
        return $resource
    }
}