save progress
This commit is contained in:
@@ -0,0 +1,130 @@
|
||||
namespace StellaOps.Cli.Plugins.Vex;
|
||||
|
||||
public static class VexCliValidation
|
||||
{
|
||||
public static bool TryResolveTargetImage(
|
||||
string? image,
|
||||
string? check,
|
||||
out string targetImage,
|
||||
out string errorMessage)
|
||||
{
|
||||
targetImage = string.Empty;
|
||||
errorMessage = string.Empty;
|
||||
|
||||
var hasImage = !string.IsNullOrWhiteSpace(image);
|
||||
var hasCheck = !string.IsNullOrWhiteSpace(check);
|
||||
|
||||
if (!hasImage && !hasCheck)
|
||||
{
|
||||
errorMessage = "Either --image or --check must be specified.";
|
||||
return false;
|
||||
}
|
||||
|
||||
if (hasImage && hasCheck)
|
||||
{
|
||||
errorMessage = "--image and --check are mutually exclusive.";
|
||||
return false;
|
||||
}
|
||||
|
||||
targetImage = hasImage ? image! : check!;
|
||||
return true;
|
||||
}
|
||||
|
||||
public static bool TryValidateMin(string name, int value, int minInclusive, out string errorMessage)
|
||||
{
|
||||
errorMessage = string.Empty;
|
||||
|
||||
if (value < minInclusive)
|
||||
{
|
||||
errorMessage = $"{name} must be >= {minInclusive}.";
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public static bool TryValidateMin(string name, double value, double minInclusive, out string errorMessage)
|
||||
{
|
||||
errorMessage = string.Empty;
|
||||
|
||||
if (value < minInclusive)
|
||||
{
|
||||
errorMessage = $"{name} must be >= {minInclusive}.";
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public static bool TryValidateRange(
|
||||
string name,
|
||||
double value,
|
||||
double minInclusive,
|
||||
double maxInclusive,
|
||||
out string errorMessage)
|
||||
{
|
||||
errorMessage = string.Empty;
|
||||
|
||||
if (value < minInclusive || value > maxInclusive)
|
||||
{
|
||||
errorMessage = $"{name} must be between {minInclusive} and {maxInclusive}.";
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public static bool TryValidateOutputPath(string? outputPath, out string errorMessage)
|
||||
{
|
||||
errorMessage = string.Empty;
|
||||
|
||||
if (string.IsNullOrWhiteSpace(outputPath))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
var fullPath = Path.GetFullPath(outputPath);
|
||||
if (Directory.Exists(fullPath))
|
||||
{
|
||||
errorMessage = "Output path must be a file, not a directory.";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
errorMessage = $"Output path is invalid: {ex.Message}";
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public static bool TryValidateServerUrl(string? serverUrl, out Uri? uri, out string errorMessage)
|
||||
{
|
||||
uri = null;
|
||||
errorMessage = string.Empty;
|
||||
|
||||
if (string.IsNullOrWhiteSpace(serverUrl))
|
||||
{
|
||||
errorMessage = "Server URL is required.";
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!Uri.TryCreate(serverUrl, UriKind.Absolute, out var parsed))
|
||||
{
|
||||
errorMessage = "Server URL must be an absolute URI.";
|
||||
return false;
|
||||
}
|
||||
|
||||
if (parsed.Scheme != Uri.UriSchemeHttp && parsed.Scheme != Uri.UriSchemeHttps)
|
||||
{
|
||||
errorMessage = "Server URL must use http or https.";
|
||||
return false;
|
||||
}
|
||||
|
||||
uri = parsed;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user