Skip to content

Commit

Permalink
Add error handling support to shell generation
Browse files Browse the repository at this point in the history
  • Loading branch information
calebkiage committed Feb 16, 2022
1 parent 5c0347c commit a7cf475
Showing 1 changed file with 21 additions and 1 deletion.
22 changes: 21 additions & 1 deletion src/Kiota.Builder/Writers/Shell/ShellCodeMethodWriter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ class ShellCodeMethodWriter : CodeMethodWriter
private static Regex camelCaseRegex = new Regex("(?<=[a-z])([A-Z])", RegexOptions.Compiled);
private static Regex identifierRegex = new Regex("(?:[-_\\.]([a-zA-Z]))", RegexOptions.Compiled);
private static Regex uppercaseRegex = new Regex("([A-Z])", RegexOptions.Compiled);
private const string cancellationTokenParamType = "CancellationToken";
private const string cancellationTokenParamName = "cancellationToken";
private const string consoleParamType = "IConsole";
private const string consoleParamName = "console";
private const string fileParamType = "FileInfo";
Expand Down Expand Up @@ -125,6 +127,11 @@ private void WriteExecutableCommand(CodeMethod codeElement, RequestParams reques
// Add console param
paramTypes.Add(consoleParamType);
paramNames.Add(consoleParamName);

// Add CancellationToken param
paramTypes.Add(cancellationTokenParamType);
paramNames.Add(cancellationTokenParamName);

var zipped = paramTypes.Zip(paramNames);
var projected = zipped.Select((x, y) => $"{x.First} {x.Second}");
var handlerParams = string.Join(", ", projected);
Expand Down Expand Up @@ -351,13 +358,26 @@ protected virtual void WriteCommandHandlerBody(CodeMethod codeElement, RequestPa
var separator = string.IsNullOrWhiteSpace(parametersList) ? "" : ", ";
WriteRequestInformation(writer, generatorMethod, parametersList, separator);

var errorMappingVarName = "default";
if (codeElement.ErrorMappings.Any())
{
errorMappingVarName = "errorMapping";
writer.WriteLine($"var {errorMappingVarName} = new Dictionary<string, Func<IParsable>> {{");
writer.IncreaseIndent();
foreach (var errorMapping in codeElement.ErrorMappings)
{
writer.WriteLine($"{{\"{errorMapping.Key.ToUpperInvariant()}\", () => new {errorMapping.Value.Name.ToFirstCharacterUpperCase()}()}},");
}
writer.CloseBlock("};");
}

var requestMethod = "SendPrimitiveAsync<Stream>";
if (isVoid)
{
requestMethod = "SendNoContentAsync";
}

writer.WriteLine($"{(isVoid ? string.Empty : "var response = ")}await RequestAdapter.{requestMethod}(requestInfo);");
writer.WriteLine($"{(isVoid ? string.Empty : "var response = ")}await RequestAdapter.{requestMethod}(requestInfo, errorMapping: {errorMappingVarName}, cancellationToken: {cancellationTokenParamName});");
}

private static void WriteRequestInformation(LanguageWriter writer, CodeMethod generatorMethod, string parametersList, string separator)
Expand Down

0 comments on commit a7cf475

Please sign in to comment.