ResultPairBr é uma library para tratamento de resultados em aplicações Delphi. Ele fornece uma abordagem elegante e segura para lidar com resultados de operações que podem ter sucesso ou falha, ele possui dois campos: um para armazenar o valor do resultado em caso de sucesso, e outro para armazenar o motivo da falha em caso de erro. Com o ResultPairBr, os desenvolvedores podem criar operações que retornam um TResultPair em vez de um valor simples. Isso permite que o código que chama a operação verifique se o resultado foi bem sucedido ou não, e trate cada caso de forma apropriada
Embarcadero Delphi XE e superior.
Instalação usando o boss install
comando:
boss install "https://github.com/HashLoad/resultpairbr"
#@ 🔨 Recursos de para caputra o retorno duplo
✔️ Recurso 1
: TResultPairBr<String, Exception>
para (Definição do retorno duplo)
✔️ Recurso 2
: TResultPairBr<String, Exception>.TryException<String>
para (Captura do retorno duplo)
✔️ Recurso 3
: TResultPairBr<String, Exception>.Map(MapValue).TryException<String>
para (Operações antes do retono duplo)
function TController.Failure: String;
var
LResult: TResultPair;
LMessage: String;
begin
Result := '';
LResult := FRepository.fetchProductsFailure;
try
if LResult.isSuccess() then
LMessage := LResult.ValueSuccess
else
if LResult.isFailure() then
LMessage := LResult.ValueFailure.Message;
Result := LMessage;
finally
LResult.Free;
end;
end;
function TController.Success: String;
var
LResult: TResultPair;
LMessage: String;
begin
Result := '';
LResult := FRepository.fetchProductsSuccess;
try
LMessage := LResult.TryException<String>(
function: String
begin
Result := LResult.ValueSuccess;
end,
function: String
begin
Result := LResult.ValueFailure.Message;
end
);
Result := LMessage;
finally
LResult.Free;
end;
end;
procedure TController.FutureNoAwait;
var
LResult: IFuture<TResultPair>;
LMessage: String;
begin
LMessage := '';
TThread.CreateAnonymousThread(
procedure
begin
LResult := TTask.Future<TResultPair>(FRepository.fetchProductsFuture);
try
LMessage := LResult.Value.Map(MapValue).TryException<String>(
function: String
begin
Result := LResult.Value.ValueSuccess;
end,
function: String
begin
Result := LResult.Value.ValueFailure.Message;
end
);
TThread.Queue(nil,
procedure
begin
if Assigned(FThreadObserver) then
FThreadObserver(LMessage);
end);
finally
// Libera o tipo TResultPair que é criado internamente ao TTask
LResult.Value.Free;
// Libera o TTask.Future<>
LResult := nil;
end;
end
).Start;
end;
Nossa equipe adoraria receber contribuições para este projeto open source. Se você tiver alguma ideia ou correção de bug, sinta-se à vontade para abrir uma issue ou enviar uma pull request.
Para enviar uma pull request, siga estas etapas:
- Faça um fork do projeto
- Crie uma nova branch (
git checkout -b minha-nova-funcionalidade
) - Faça suas alterações e commit (
git commit -am 'Adicionando nova funcionalidade'
) - Faça push da branch (
git push origin minha-nova-funcionalidade
) - Abra uma pull request