Genbox.FastData.psm1
function Invoke-FastData { param ( [Parameter(Mandatory = $true)][ValidateSet("csharp", "cpp", "rust")] [string]$Command, [string]$OutputFile, [ValidateSet("char", "double", "int16", "int32", "int64", "int8", "single", "string", "uint16", "uint32", "uint64", "uint8")] [string]$DataType = "string", [ValidateSet("Auto", "Array", "BinarySearch", "Conditional", "HashSet")] [string]$StructureType = "Auto", [Parameter(Mandatory = $true)] [string]$InputFile, [string]$Namespace, [string]$ClassName = "MyData" ) Add-Type -Path "$PSScriptRoot\lib\Genbox.FastData.dll" -ErrorAction Stop Add-Type -Path "$PSScriptRoot\lib\Genbox.FastData.Generator.dll" -ErrorAction Stop Add-Type -Path "$PSScriptRoot\lib\Genbox.FastData.Generator.CSharp.dll" -ErrorAction Stop Add-Type -Path "$PSScriptRoot\lib\Genbox.FastData.Generator.CPlusPlus.dll" -ErrorAction Stop Add-Type -Path "$PSScriptRoot\lib\Genbox.FastData.Generator.Rust.dll" -ErrorAction Stop function Get-TypeFunc { param ($DataType) switch ($DataType) { "string" { return { [string]$_ } } "char" { return { [char]$_ } } "int8" { return { [sbyte]::Parse($_) } } "uint8" { return { [byte]::Parse($_) } } "int16" { return { [short]::Parse($_) } } "uint16" { return { [ushort]::Parse($_) } } "int32" { return { [int]::Parse($_) } } "uint32" { return { [uint]::Parse($_) } } "int64" { return { [long]::Parse($_) } } "uint64" { return { [ulong]::Parse($_) } } "single" { return { [float]::Parse($_) } } "double" { return { [double]::Parse($_) } } default { throw "Unsupported data type: $DataType" } } } $typeFunc = Get-TypeFunc $DataType $data = Get-Content -Path $InputFile | ForEach-Object { & $typeFunc $_ } $config = New-Object Genbox.FastData.Configs.FastDataConfig([Genbox.FastData.Enums.StructureType]::$StructureType) if ($Command -eq "csharp") { $cfg = New-Object Genbox.FastData.Generator.CSharp.CSharpCodeGeneratorConfig($ClassName) $cfg.Namespace = $Namespace $generator = [Genbox.FastData.Generator.CSharp.CSharpCodeGenerator]::Create($cfg) } elseif ($Command -eq "cpp") { $cfg = New-Object Genbox.FastData.Generator.CPlusPlus.CPlusPlusCodeGeneratorConfig($ClassName) $generator = [Genbox.FastData.Generator.CPlusPlus.CPlusPlusCodeGenerator]::Create($cfg) } elseif ($Command -eq "rust") { $cfg = New-Object Genbox.FastData.Generator.Rust.RustCodeGeneratorConfig($ClassName) $generator = [Genbox.FastData.Generator.Rust.RustCodeGenerator]::Create($cfg) } $source = [ref]'' $ok = [Genbox.FastData.FastDataGenerator]::TryGenerate($data, $config, $generator, [ref]$source) if (-not $ok) { throw "Unable to generate code" } if ($OutputFile) { $source.Value | Out-File -Encoding UTF8 -FilePath $OutputFile } else { Write-Output $source } } Export-ModuleMember -Function Invoke-FastData |