modules/Downloader/DownloaderBase.psm1

using module '..\Enums.psm1'
using module '..\SessionConfig.psm1'

class Downloader{
    [SessionConfig] $config
    [string] $fileName
    [string] $fileExtension

    Downloader([SessionConfig] $config){
        $this.config = $config
    }

    hidden [object] getValue([object] $obj, [object] $obj2){
        if ($obj) { return $obj }
        else { return $obj2 }
    }

    [hashtable] Download([SOURCE] $source, [bool] $runAsJob){
        throw('Must be overriden')
    }
}