LinkKindTransformAttribute

The LinkKindTransformAttribute converts a string with wildcard characters into one or more LinkKind enum values.

Definition

Source Code

# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.

using namespace System.Management.Automation
using module ../Enums/LinkKind.psm1

class LinkKindTransformAttribute : ArgumentTransformationAttribute {
  [object] Transform([EngineIntrinsics]$engineIntrinsics, [System.Object]$inputData) {
    $ValidEnums = [LinkKind].GetEnumNames()
    $outputData = switch ($inputData) {
      { $_ -is [LinkKind] } { $_ }

      { $_ -is [string] } {
        if ($_ -in $ValidEnums) {
          $_
        } elseif ($Matching = $ValidEnums -like $_) {
          $Matching
        } else {
          $Message = @(
            "Specified kind '$_' couldn't resolve to any LinkKind enums;"
            'values must be a specific LinkKind or a wildcard expression'
            "(containing '*', '?', or '[]') matching one or more LinkKind."
            "Valid LinkKind enums are: $ValidEnums"
          ) -join ' '
          throw [ArgumentTransformationMetadataException]::New(
            $Message
          )
        }
      }
      default {
        $Message = @(
          "Could not convert input ($_) of type '$($_.GetType().FullName)' to a LinkKind."
          "Specify a valid LinkKind or a wildcard expression (containing '*', '?', or '[]')"
          "matching one or more LinkKind enums. Valid LinkKind enums are: $ValidEnums"
        ) -join ' '
        throw [ArgumentTransformationMetadataException]::New(
          $Message
        )
      }
    }

    return $outputData
  }
}

The LinkKindTransformAttribute class is an argument transformation attribute that converts a string with wildcard characters into one or more LinkKind enum values.

Examples

Example 1: Transforming a string variable

[LinkKindTransform()]$Kinds = 'Text*'
$Kinds
TextInline
TextSelfReference
TextUsingReference

Example 2: Transforming a string parameter

function Get-LinkKind {
  [cmdletbinding()]
  param (
    [LinkKindTransform()][LinkKind[]]$Kind
  )

  process {
    $Kind
  }
}

Get-LinkKind -Kind *Reference
TextSelfReference
TextUsingReference
ImageSelfReference
ImageUsingReference

Methods

Transform(EngineIntrinsics, Object)
Tranforms the input object into one or more matching LinkKind enums.

Properties

None.