Skip to content

Commit

Permalink
Enable setting defaults at the parameter level.
Browse files Browse the repository at this point in the history
  • Loading branch information
michael-okeefe committed Dec 17, 2024
1 parent 454e14e commit edd41cc
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 12 deletions.
1 change: 1 addition & 0 deletions templates/template-engine/TemplateParameter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ public class TemplateParameter
public ParamType Type { get; set; }
public bool IsOptional { get; set; }
public Func<object, bool> Validate { get; set; }
public object? DefaultValue { get; set; }

public TemplateParameter()
{
Expand Down
58 changes: 46 additions & 12 deletions templates/template-engine/Utils.cs
Original file line number Diff line number Diff line change
Expand Up @@ -401,7 +401,17 @@ public static void
{
TemplateParameter tp = kvp.Value;
string optText = tp.IsOptional ? " (optional)" : "";
Console.WriteLine($"- {kvp.Key}{optText}: {tp.Type}");
string defaultValue = "";
if (tp.DefaultValue != null)
{
defaultValue = (tp.DefaultValue.ToString() ?? "").Trim();
if (defaultValue.Length > 0)
{
defaultValue = $" (default: {defaultValue})";
}
}
Console.WriteLine(
$"- {kvp.Key}{optText}{defaultValue}: {tp.Type}");
}
}

Expand Down Expand Up @@ -438,10 +448,16 @@ bool isOptional
string paramName = paramKvp.Key;
TomlTable singleParam = (TomlTable)paramKvp.Value;
string paramTypeAsStr = Get<string>(singleParam, "type");
object? defaultValue = null;
if (paramTable.ContainsKey("default"))
{
defaultValue = paramTable["default"];
}
ParamType paramType = StringToParamType(paramTypeAsStr);
if (paramType == ParamType.Unhandled)
{
throw new Exception($"[ERROR] Unhandled parameter type for '{paramName}' ({paramTypeAsStr})");
throw new Exception(
$"[ERROR] Unhandled parameter type for '{paramName}' ({paramTypeAsStr})");
}
switch (paramType)
{
Expand All @@ -466,6 +482,7 @@ bool isOptional
catch {}
return false;
},
DefaultValue = defaultValue,
};
parameters.Add(paramName, tp);
}
Expand All @@ -486,6 +503,7 @@ bool isOptional
catch {}
return false;
},
DefaultValue = defaultValue,
};
parameters.Add(paramName, tp);
}
Expand All @@ -506,6 +524,7 @@ bool isOptional
catch {}
return false;
},
DefaultValue = defaultValue,
};
parameters.Add(paramName, tp);
}
Expand All @@ -526,6 +545,7 @@ bool isOptional
catch {}
return false;
},
DefaultValue = defaultValue,
};
parameters.Add(paramName, tp);
}
Expand All @@ -546,6 +566,7 @@ bool isOptional
catch {}
return false;
},
DefaultValue = defaultValue,
};
parameters.Add(paramName, tp);
}
Expand All @@ -571,6 +592,7 @@ bool isOptional
catch {}
return false;
},
DefaultValue = defaultValue,
};
parameters.Add(paramName, tp);
}
Expand Down Expand Up @@ -612,6 +634,7 @@ bool isOptional
catch {}
return false;
},
DefaultValue = defaultValue,
};
parameters.Add(paramName, tp);
}
Expand Down Expand Up @@ -791,10 +814,23 @@ public static TomlTable
{
defaultValue = fieldValue["default"];
}
else if (parameters.TryGetValue(
fieldName, out TemplateParameter? tp))
{
defaultValue = tp.DefaultValue;
}
string defaultStr = "";
if (defaultValue != null)
{
string def = defaultValue.ToString() ?? "";
defaultStr = $" (default: {def})";
}
if (verbose)
{
Console.WriteLine(
$"[INFO] Found field '{fieldName}' parameterized on '{paramName}' {templateInfo}"
$"[INFO] Found field '{fieldName}' "
+ $"parameterized on '{paramName}' "
+ $"{templateInfo} {defaultStr}"
);
}
}
Expand All @@ -803,19 +839,15 @@ public static TomlTable
{}
if (isParam)
{
if (!component.ContainsKey(paramName))
TemplateParameter tp = parameters[paramName];
if (!tp.IsOptional && !component.ContainsKey(paramName))
{
throw new Exception($"[ERROR] Component missing param {paramName} {templateInfo}");
throw new Exception($"[ERROR] Missing required param '{paramName}' {templateInfo}");
}
if (!parameters.ContainsKey(paramName))
{
throw new Exception($"[ERROR] Reference to undefined parameter {paramName} {templateInfo}");
}
TemplateParameter tp = parameters[paramName];
if (!tp.IsOptional && !component.ContainsKey(paramName))
{
throw new Exception($"[ERROR] Missing required param '{paramName}' {templateInfo}");
}
object? paramValue = null;
if (component.ContainsKey(paramName))
{
Expand All @@ -825,15 +857,17 @@ public static TomlTable
{
if (!tp.Validate(paramValue))
{
throw new Exception($"[ERROR] Invalid value for parameter {paramName} {templateInfo}");
throw new Exception(
$"[ERROR] Invalid value for parameter {paramName} {templateInfo}");
}
toAdd.Add(fieldName, paramValue);
}
else if (defaultValue != null)
{
if (!tp.Validate(defaultValue))
{
throw new Exception($"[ERROR] Invalid default value for parameter {paramName} {templateInfo}");
throw new Exception(
$"[ERROR] Invalid default value for parameter {paramName} {templateInfo}");
}
toAdd.Add(fieldName, defaultValue);
}
Expand Down

0 comments on commit edd41cc

Please sign in to comment.