Skip to content

Commit

Permalink
Returning responses directly in service to prevent extra allocation
Browse files Browse the repository at this point in the history
  • Loading branch information
biegehydra committed Oct 22, 2023
1 parent fcdcc77 commit c04fce1
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 17 deletions.
12 changes: 6 additions & 6 deletions LibPostalApi/Controllers/LibPostalController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,13 @@ public IActionResult ExpandAddresses([FromBody] ExpandAddressesRequest? request)
return BadRequest($"Too many addresses. Request had {request.Addresses.Count} addresses. Only 1000 addresses are allowed per request.");
}

var results = _libPostal.ExpandAddress(request.Addresses, request.ExpandOptions);
if (results.Results == null)
var response = _libPostal.ExpandAddress(request.Addresses, request.ExpandOptions);
if (response?.ExpandResults == null)
{
return StatusCode((int)HttpStatusCode.InternalServerError, "An internal server error occurred.");
}

return Ok(new ExpandAddressesResponse(results.Results, request.Addresses.Count, results.Successes, results.Failures));
return Ok(response);
}

[HttpPost]
Expand All @@ -57,13 +57,13 @@ public IActionResult ParseAddresses([FromBody] ParseAddressesRequest? request)
return BadRequest($"Too many addresses. Request had {request.Addresses.Count} addresses. Only 1000 addresses are allowed per request.");
}

var results = _libPostal.ParseAddress(request.Addresses, request.ParseOptions);
if (results.Results == null)
var response = _libPostal.ParseAddress(request.Addresses, request.ParseOptions);
if (response?.ParseResults == null)
{
return StatusCode((int)HttpStatusCode.InternalServerError, "An internal server error occurred.");
}

return Ok(new ParseAddressesResponse(results.Results, request.Addresses.Count, results.Successes, results.Failures));
return Ok(response);
}
}
}
4 changes: 2 additions & 2 deletions LibPostalApi/Interfaces/ILibPostalService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,6 @@ namespace LibPostalApi.Interfaces;

public interface ILibPostalService
{
(AddressParserResponse[]? Results, int Successes, int Failures) ParseAddress(List<string> addresses, ParseOptions? dtoOptions = null);
(AddressExpansionResponse[]? Results, int Successes, int Failures) ExpandAddress(List<string> addresses, ExpandOptions? dtoOptions = null);
ParseAddressesResponse? ParseAddress(List<string> addresses, ParseOptions? dtoOptions = null);
ExpandAddressesResponse? ExpandAddress(List<string> addresses, ExpandOptions? dtoOptions = null);
}
3 changes: 1 addition & 2 deletions LibPostalApi/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
var libPostal = app.Services.GetRequiredService<ILibPostalService>();
var testParse = libPostal.ParseAddress(TestData.TestAddress);
var testExpand = libPostal.ParseAddress(TestData.TestAddress);
if (testParse.Results == null || testExpand.Results == null)
if (testParse?.ParseResults == null || testExpand?.ParseResults == null)
{
context.Response.StatusCode = 500;
await context.Response.WriteAsync("LibPostalApi is not healthy");
Expand All @@ -49,7 +49,6 @@
Console.WriteLine($"Health check endpoint called at {DateTime.UtcNow}");
}
// Call the next middleware in the pipeline
await next.Invoke();
});

Expand Down
14 changes: 7 additions & 7 deletions LibPostalApi/Services/LibPostalService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public LibPostalService(IConfiguration config)
var currentDir = Directory.GetCurrentDirectory();
Console.WriteLine($"CurrentDir: {currentDir}");
dataDir = Path.Combine(Directory.GetParent(currentDir)!.FullName, dataDir!);
Console.WriteLine($"Combine: {dataDir}");
Console.WriteLine($"CombinedDir: {dataDir}");

_libPostal = LibPostal.GetInstance(dataDir);
_libPostal.LoadParser();
Expand All @@ -25,15 +25,15 @@ public LibPostalService(IConfiguration config)
Initialized = true;
}

public (AddressParserResponse[]? Results, int Successes, int Failures) ParseAddress(List<string> addresses, ParseOptions? dtoOptions)
public ParseAddressesResponse? ParseAddress(List<string> addresses, ParseOptions? dtoOptions)
{
try
{
var domainOptions = _libPostal.GetAddressParserDefaultOptions();

dtoOptions?.MapValuesTo(domainOptions);

var results = new AddressParserResponse[addresses.Count];
AddressParserResponse[] results = new AddressParserResponse[addresses.Count];

var successes = 0;
var failures = 0;
Expand All @@ -59,7 +59,7 @@ public LibPostalService(IConfiguration config)
Console.WriteLine($"Error Inside Parse. Input: {addresses} : {ex}");
}
}
return (results, successes, failures);
return new (results, results.Length, successes, failures);
}
catch (Exception ex)
{
Expand All @@ -68,15 +68,15 @@ public LibPostalService(IConfiguration config)
}
}

public (AddressExpansionResponse[]? Results, int Successes, int Failures) ExpandAddress(List<string> addresses, ExpandOptions? dtoOptions)
public ExpandAddressesResponse? ExpandAddress(List<string> addresses, ExpandOptions? dtoOptions)
{
try
{
var domainOptions = _libPostal.GetAddressExpansionDefaultOptions();

dtoOptions?.MapValuesTo(domainOptions);

var results = new AddressExpansionResponse[addresses.Count];
AddressExpansionResponse[] results = new AddressExpansionResponse[addresses.Count];

var successes = 0;
var failures = 0;
Expand All @@ -103,7 +103,7 @@ public LibPostalService(IConfiguration config)
Console.WriteLine($"Error Inside Expand. Input: {addresses} : {ex}");
}
}
return (results, successes, failures);
return new (results, results.Length, successes, failures);
}
catch (Exception ex)
{
Expand Down

0 comments on commit c04fce1

Please sign in to comment.