projects/projects.ps1

class HubProject{
    [string] $Id
    [string] $Name
    [string] $Source
    [boolean] $ProjectLevelAdjustments
    hidden [string] $href

    HubProject($name, $source, $projectLevelAdjustments, $href){
        $this.href = $href
        $this.Name = $name
        $this.Source = $source
        $this.ProjectLevelAdjustments = $projectLevelAdjustments
        $this.Id = $href.Substring("${global:hubUrl}/api/projects/".Length)

    }

    static [HubProject] Parse($jsonProject){
        return [HubProject]::new(
           $jsonProject.name,
           $jsonProject.source,
           "true".Equals($jsonProject.projectLevelAdjustments),
           $jsonProject._meta.href)
    }

    [string] ToString(){
        return "$($this.Name) [$($this.Source)]"
    }
}

class HubProjectVersion{
    [string] $Id
    [string] $Name
    [HubLicense] $License
    [string] $Phase
    [string] $Distribution
    [string] $Source
    hidden [string] $href

    static [HubProjectVersion] Parse($jsonProjectVersion){
        $versionHref=$jsonProjectVersion._meta.href
        
        return New-Object HubProjectVersion -Property @{
            Id = $versionHref.Substring($versionHref.LastIndexOf('/') + 1);
            Name = $jsonProjectVersion.versionName;
            Phase = $jsonProjectVersion.phase;
            Distribution = $jsonProjectVersion.distribution;
            Source = $jsonProjectVersion.source;
            License = ParseLicense $jsonProjectVersion.license;
            href = $versionHref;
        }
    }
}