private/specs/Set-OptionalParameter.ps1
<#
.SYNOPSIS Add any optional property to the given 'TargetObject' if it exists in the given 'SourceObject' .DESCRIPTION Add any optional property to the given 'TargetObject' if it exists in the given 'SourceObject' .PARAMETER SourceParameterObject Mandatory. The source object to fetch the properties from .PARAMETER TargetObject Mandatory. The target object to add the optional parameters to .EXAMPLE Set-OptionalParameter -SourceParameterObject @{ minLength = 3; allowedValues = @('default') } -TargetObject @{ name = 'sampleObject' } Add any optional parameter defined in the given source object to the given target object. In this case, both the 'minLength' & 'allowedValues' properties would be added. In addition, the property 'default' is added, as the 'allowedValues' specify only one possible value. #> function Set-OptionalParameter { [CmdletBinding()] param ( [Parameter(Mandatory = $true)] [hashtable] $SourceParameterObject, [Parameter(Mandatory = $true)] [hashtable] $TargetObject ) # Allowed values if ($SourceParameterObject.Keys -contains 'enum') { $TargetObject['allowedValues'] = $SourceParameterObject.enum if ($SourceParameterObject.enum.count -eq 1) { $TargetObject['default'] = $SourceParameterObject.enum[0] } } # Min Length if ($SourceParameterObject.Keys -contains 'minLength') { $TargetObject['minLength'] = $SourceParameterObject.minLength } # Max Length if ($SourceParameterObject.Keys -contains 'maxLength') { $TargetObject['maxLength'] = $SourceParameterObject.maxLength } # Min if ($SourceParameterObject.Keys -contains 'minimum') { $TargetObject['minValue'] = $SourceParameterObject.minimum } # Max if ($SourceParameterObject.Keys -contains 'maximum') { $TargetObject['maxValue'] = $SourceParameterObject.maximum } # Default value if ($SourceParameterObject.Keys -contains 'default') { $TargetObject['default'] = $SourceParameterObject.default } elseif($TargetObject.Required -eq $false) { # If no default is specified, but we know the value is optional, we can set it as per its type switch ($TargetObject.Type) { 'object' { $TargetObject['default'] = @{} } 'array' { $TargetObject['default'] = @() } 'boolean' { $TargetObject['default'] = '' } # Unkown 'number' { $TargetObject['default'] = '' } # Unkown 'integer' { $TargetObject['default'] = '' } # Unkown 'string' { $TargetObject['default'] = '' } Default { throw ('Missing type handling for type [{0}]' -f $TargetObject.Type) } } } # Pattern if ($SourceParameterObject.Keys -contains 'pattern') { $TargetObject['pattern'] = $SourceParameterObject.pattern } # Secure if ($SourceParameterObject.Keys -contains 'x-ms-secret') { $TargetObject['secure'] = $SourceParameterObject.'x-ms-secret' } return $TargetObject } |