Internal/ConvertTo-JiraSession.ps1

function ConvertTo-JiraSession {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true)]
        $WebResponse,

        [Parameter(Mandatory = $true)]
        $Session,

        [Parameter(Mandatory = $true)]
        [String] $Username
    )

    process {
        $obj = ConvertFrom-Json2 -InputObject $WebResponse

        # Write-Debug "[ConvertTo-JiraSession] Defining standard properties"
        $props = @{
            'WebSession' = $Session;
            'JSessionID' = $obj.session.value;
            'LoginInfo'  = $obj.loginInfo;
        }

        if ($Username) {
            # Write-Debug "[ConvertTo-JiraSession] Adding username"
            $props.Username = $Username
        }

        # Write-Debug "[ConvertTo-JiraSession] Creating PSObject out of properties"
        $result = New-Object -TypeName PSObject -Property $props

        # Write-Debug "[ConvertTo-JiraSession] Inserting type name information"
        $result.PSObject.TypeNames.Insert(0, 'JiraPS.Session')

        # Write-Debug "[ConvertTo-JiraSession] Inserting custom toString() method"
        $result | Add-Member -MemberType ScriptMethod -Name "ToString" -Force -Value {
            Write-Output "JiraSession[JSessionID=$($this.JSessionID)]"
        }

        # Write-Debug "[ConvertTo-JiraSession] Outputting object"
        Write-Output $result
    }
}