OpenAPI.NET.Parser.psm1

$script:init = $true

function Initialize-Parsers {
    [CmdletBinding()]
    param()
    if ($script:init) {
        $script:init = $false
        # Register JSON parser
        Write-Verbose -Message 'Initializing JSON parser...'
        [OpenAPI.NET.SpecParserFactory]::Instance.RegisterSpecParser([OpenAPI.NET.SpecificationType]::JSON, [OpenAPI.NET.Json.JsonParser]::new())

        Write-Verbose -Message 'All initialization done.'
    }
}

function Import-Specification {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory=$true)]
        $FilePath,

        [Parameter(Mandatory=$false)]
        [ValidateSet('JSON')]
        $Language = 'JSON',

        [Parameter(Mandatory=$false)]
        [ValidateSet('OpenAPIv2')]
        $Format = 'OpenAPIv2'
    )
    Initialize-Parsers
    $parser = $null
    if ($Language -eq 'JSON') {
        $parser = [OpenAPI.NET.SpecParserFactory]::Instance.GetSpecParser([OpenAPI.NET.SpecificationType]::JSON);
    }

    if (-not $parser) {
        Write-Error 'Failed to initialize parser for given language.'
        return
    }

    $rootObjectType = $null
    if ($Format -eq 'OpenAPIv2') {
        $rootObjectType = [OpenAPI.NET.Models.BuiltIn.OpenAPIv2.OpenAPIv2]
    }

    if (-not $rootObjectType) {
        Write-Error 'Failed to find object model for given format.'
        return
    }

    $parser.Parse($FilePath, $rootObjectType)
}

function Export-Specification {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory=$true)]
        [OpenAPI.NET.Models.SpecificationObject]
        $Specification,

        [Parameter(Mandatory=$false)]
        [ValidateSet('JSON')]
        $Language = 'JSON'
    )

    Initialize-Parsers
    $parser = $null
    if ($Language -eq 'OpenAPIv2') {
        $parser = [OpenAPI.NET.SpecParserFactory]::Instance.GetSpecParser([OpenAPI.NET.SpecificationType]::JSON);
    }

    if (-not $parser) {
        Write-Error 'Failed to initialize parser for given language.'
        return
    }

    $parser.Serialize($Specification)
}