Rest/Add-InternalType.ps1

Function Add-InternalType
{
    Param (
        [String]$TypeName,
        [switch]$IsRecursed
    )

    #Check if we're good
    $TypeLoaded = $true
    try
    {
        $TypeText = Get-InternalType -Type $TypeName
    }
    catch
    {
        $TypeLoaded = $false
    }
        
    if ($TypeLoaded -eq $false)
    {
        #Find the file
        if (test-path $TypeName)
        {
            $FilePath = $TypeName
        }
        Else
        {
            $FilePath = (Get-ChildItem -path "$script:thismodulepath\Classes" -Recurse -File -Filter "$TypeName.cs").FullName
        }
        
        if ($FilePath)
        {
            #We have ze file
        }
        Else
        {
            #Could not find file
            throw "Unable to load $typename. Could not find file anywhere"
        }
        

        $FileRefs = @()
        $FileRefs += $FilePath

        $FileContent = get-content $FilePath
        #Get the refs
        $EndOfRefs = $false
        $LineNumber = 0
        Do {
            $FileLineContent = $FileContent[$LineNumber]
            if ($FileLineContent -like "//BLUEREF*")
            {
                $FileRef = $FileLineContent.Replace('//BLUEREF:',"")
                $FileObj = Get-ChildItem "$Script:thismodulepath\Classes" -Recurse | where {$_.BaseName -eq $FileRef}
                $FileRefs += Add-InternalType -TypeName ($Fileobj.FullName) -IsRecursed

            }
            else
            {
                $EndOfRefs = $true
            }
            $LineNumber ++
        }
        Until ($EndOfRefs -eq $true)

        if ($isrecursed)
        {
            return $FileRefs
        }
        Else
        {
            #Load Things
            Try 
            {
                Add-type -Path $FileRefs
            }
            Catch
            {

                if ($_.FullyQualifiedErrorId -match "TYPE_ALREADY_EXISTS")
                {}
                else
                {
                    throw $_.FullyQualifiedErrorId
                }
            }
            
        }


    }
}