diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 38efffd..d47ba2b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -18,12 +18,12 @@ jobs: - name: Restore dependencies run: dotnet restore - name: Create NuGet Package - run: dotnet pack -c Release /p:Version=${{ github.event.release.tag_name }} /p:PackageReleaseNotes="See https://github.com/late4dtrain/functional-result/releases/tag/${{ github.event.release.tag_name }}" + run: dotnet pack -c Release /p:Version=${{ github.event.release.tag_name }} /p:PackageReleaseNotes="See https://github.com/late4dtrain/result/releases/tag/${{ github.event.release.tag_name }}" - name: Archive NuGet Package uses: actions/upload-artifact@v1 with: name: Result - path: ./Late4dTrain.Functional.Result/bin/Release/Late4dTrain.Functional.Result.${{ github.event.release.tag_name }}.nupkg + path: ./Late4dTrain.Result/bin/Release/Late4dTrain.Result.${{ github.event.release.tag_name }}.nupkg - name: Publish NuGet Package run: dotnet nuget push **/*.nupkg --api-key ${{ secrets.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json diff --git a/Late4dTrain.Functional.Result.Tests/Late4dTrain.Functional.Result.Tests.csproj b/Late4dTrain.Result.Tests/Late4dTrain.Result.Tests.csproj old mode 100644 new mode 100755 similarity index 82% rename from Late4dTrain.Functional.Result.Tests/Late4dTrain.Functional.Result.Tests.csproj rename to Late4dTrain.Result.Tests/Late4dTrain.Result.Tests.csproj index bc3b064..a6d0a0f --- a/Late4dTrain.Functional.Result.Tests/Late4dTrain.Functional.Result.Tests.csproj +++ b/Late4dTrain.Result.Tests/Late4dTrain.Result.Tests.csproj @@ -1,30 +1,30 @@ - - - - net6.0 - enable - - false - - Late4dTrain.Functional.ResultTests - - - - - - - - runtime; build; native; contentfiles; analyzers; buildtransitive - all - - - runtime; build; native; contentfiles; analyzers; buildtransitive - all - - - - - - - - + + + + net6.0 + enable + + false + + Late4dTrain + + + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + + + + + diff --git a/Late4dTrain.Functional.Result.Tests/OnFailTests.cs b/Late4dTrain.Result.Tests/OnFailTests.cs similarity index 93% rename from Late4dTrain.Functional.Result.Tests/OnFailTests.cs rename to Late4dTrain.Result.Tests/OnFailTests.cs index 024a5f8..04f7c6d 100644 --- a/Late4dTrain.Functional.Result.Tests/OnFailTests.cs +++ b/Late4dTrain.Result.Tests/OnFailTests.cs @@ -1,61 +1,61 @@ -namespace Late4dTrain.Functional.ResultTests; - -using System; - -using FluentAssertions; - -using Xunit; - -public class OnFailTests -{ - [Fact] - public void OnFailWithIntResult() - { - var successCalled = false; - var failCalled = false; - var capturedError = string.Empty; - - var result = Result.Fail("It went wrong..."); - var func = () => result.Value; - - result - .OnSuccess((i) => successCalled = true) - .OnFailure((e) => - { - failCalled = true; - capturedError = e; - } - ); - - successCalled.Should().BeFalse(); - failCalled.Should().BeTrue(); - result.Error.Should().Be("It went wrong..."); - capturedError.Should().Be("It went wrong..."); - func.Should().Throw(); - } - - [Fact] - public void OnFailWithoutResult() - { - var successCalled = false; - var failCalled = false; - var capturedError = string.Empty; - - var result = Result.Fail("It went wrong..."); - - result - .OnSuccess(() => successCalled = true) - .OnFailure((e) => - { - failCalled = true; - capturedError = e; - } - ); - - successCalled.Should().BeFalse(); - failCalled.Should().BeTrue(); - result.Error.Should().Be("It went wrong..."); - capturedError.Should().Be("It went wrong..."); - } - -} +namespace Late4dTrain; + +using System; + +using FluentAssertions; + +using Xunit; + +public class OnFailTests +{ + [Fact] + public void OnFailWithIntResult() + { + var successCalled = false; + var failCalled = false; + var capturedError = string.Empty; + + var result = Result.Fail("It went wrong..."); + var func = () => result.Value; + + result + .OnSuccess((i) => successCalled = true) + .OnFailure((e) => + { + failCalled = true; + capturedError = e; + } + ); + + successCalled.Should().BeFalse(); + failCalled.Should().BeTrue(); + result.Error.Should().Be("It went wrong..."); + capturedError.Should().Be("It went wrong..."); + func.Should().Throw(); + } + + [Fact] + public void OnFailWithoutResult() + { + var successCalled = false; + var failCalled = false; + var capturedError = string.Empty; + + var result = Result.Fail("It went wrong..."); + + result + .OnSuccess(() => successCalled = true) + .OnFailure((e) => + { + failCalled = true; + capturedError = e; + } + ); + + successCalled.Should().BeFalse(); + failCalled.Should().BeTrue(); + result.Error.Should().Be("It went wrong..."); + capturedError.Should().Be("It went wrong..."); + } + +} diff --git a/Late4dTrain.Functional.Result.Tests/OnSuccessTests.cs b/Late4dTrain.Result.Tests/OnSuccessTests.cs similarity index 92% rename from Late4dTrain.Functional.Result.Tests/OnSuccessTests.cs rename to Late4dTrain.Result.Tests/OnSuccessTests.cs index d6987da..9339283 100644 --- a/Late4dTrain.Functional.Result.Tests/OnSuccessTests.cs +++ b/Late4dTrain.Result.Tests/OnSuccessTests.cs @@ -1,55 +1,55 @@ -namespace Late4dTrain.Functional.ResultTests; - -using System; - -using FluentAssertions; - -using Xunit; - -public class OnSuccessTests -{ - [Fact] - public void OnSuccessWithIntResult() - { - var successCalled = false; - var failCalled = false; - var capturedResult = 0; - - var result = Result.Ok(42); - var func = () => result.Error; - - result - .OnSuccess((i) => - { - successCalled = true; - capturedResult = i; - } - ) - .OnFailure((e) => failCalled = true); - - successCalled.Should().BeTrue(); - failCalled.Should().BeFalse(); - result.Value.Should().Be(42); - capturedResult.Should().Be(42); - func.Should().Throw(); - } - - [Fact] - public void OnSuccessWithoutResult() - { - var successCalled = false; - var failCalled = false; - - var result = Result.Ok(); - var func = () => result.Error; - - result - .OnSuccess(() => successCalled = true) - .OnFailure((e) => failCalled = true); - - successCalled.Should().BeTrue(); - failCalled.Should().BeFalse(); - - func.Should().Throw(); - } -} +namespace Late4dTrain; + +using System; + +using FluentAssertions; + +using Xunit; + +public class OnSuccessTests +{ + [Fact] + public void OnSuccessWithIntResult() + { + var successCalled = false; + var failCalled = false; + var capturedResult = 0; + + var result = Result.Ok(42); + var func = () => result.Error; + + result + .OnSuccess((i) => + { + successCalled = true; + capturedResult = i; + } + ) + .OnFailure((e) => failCalled = true); + + successCalled.Should().BeTrue(); + failCalled.Should().BeFalse(); + result.Value.Should().Be(42); + capturedResult.Should().Be(42); + func.Should().Throw(); + } + + [Fact] + public void OnSuccessWithoutResult() + { + var successCalled = false; + var failCalled = false; + + var result = Result.Ok(); + var func = () => result.Error; + + result + .OnSuccess(() => successCalled = true) + .OnFailure((e) => failCalled = true); + + successCalled.Should().BeTrue(); + failCalled.Should().BeFalse(); + + func.Should().Throw(); + } +} diff --git a/Late4dTrain.Functional.sln b/Late4dTrain.Result.sln old mode 100644 new mode 100755 similarity index 78% rename from Late4dTrain.Functional.sln rename to Late4dTrain.Result.sln index 44c7de4..fc09d20 --- a/Late4dTrain.Functional.sln +++ b/Late4dTrain.Result.sln @@ -1,22 +1,22 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Late4dTrain.Functional.Result", "Late4dTrain.Functional.Result\Late4dTrain.Functional.Result.csproj", "{AD4BBABF-A9D3-4880-895C-9F7CAEC8EB4F}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Late4dTrain.Functional.Result.Tests", "Late4dTrain.Functional.Result.Tests\Late4dTrain.Functional.Result.Tests.csproj", "{4AF544CA-A934-4853-911A-DB9E481CA52B}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {AD4BBABF-A9D3-4880-895C-9F7CAEC8EB4F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AD4BBABF-A9D3-4880-895C-9F7CAEC8EB4F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AD4BBABF-A9D3-4880-895C-9F7CAEC8EB4F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AD4BBABF-A9D3-4880-895C-9F7CAEC8EB4F}.Release|Any CPU.Build.0 = Release|Any CPU - {4AF544CA-A934-4853-911A-DB9E481CA52B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4AF544CA-A934-4853-911A-DB9E481CA52B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4AF544CA-A934-4853-911A-DB9E481CA52B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4AF544CA-A934-4853-911A-DB9E481CA52B}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 12.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Late4dTrain.Result", "Late4dTrain.Result\Late4dTrain.Result.csproj", "{AD4BBABF-A9D3-4880-895C-9F7CAEC8EB4F}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Late4dTrain.Result.Tests", "Late4dTrain.Result.Tests\Late4dTrain.Result.Tests.csproj", "{4AF544CA-A934-4853-911A-DB9E481CA52B}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {AD4BBABF-A9D3-4880-895C-9F7CAEC8EB4F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AD4BBABF-A9D3-4880-895C-9F7CAEC8EB4F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AD4BBABF-A9D3-4880-895C-9F7CAEC8EB4F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AD4BBABF-A9D3-4880-895C-9F7CAEC8EB4F}.Release|Any CPU.Build.0 = Release|Any CPU + {4AF544CA-A934-4853-911A-DB9E481CA52B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4AF544CA-A934-4853-911A-DB9E481CA52B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4AF544CA-A934-4853-911A-DB9E481CA52B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4AF544CA-A934-4853-911A-DB9E481CA52B}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/Late4dTrain.Functional.Result/Late4dTrain.Functional.Result.csproj b/Late4dTrain.Result/Late4dTrain.Result.csproj old mode 100644 new mode 100755 similarity index 64% rename from Late4dTrain.Functional.Result/Late4dTrain.Functional.Result.csproj rename to Late4dTrain.Result/Late4dTrain.Result.csproj index 4bb24e2..0e9b375 --- a/Late4dTrain.Functional.Result/Late4dTrain.Functional.Result.csproj +++ b/Late4dTrain.Result/Late4dTrain.Result.csproj @@ -1,23 +1,23 @@ - - - - enable - enable - Late4dTrain.Functional - net6.0;netstandard2.0;netstandard2.1 - 10 - Gab Soulavy - Simple generic result object in order to replace exceptions changing program flow - MIT - https://github.com/late4dtrain/functional-result - https://github.com/late4dtrain/functional-result - git - functional result - Late4dTrain.Functional.Result - 0.0.1 - 0.0.1 - 0.0.1 - MIT - - - + + + + enable + enable + Late4dTrain + net6.0;netstandard2.0;netstandard2.1 + 10 + Gab Soulavy + Simple generic result object in order to replace exceptions changing program flow + MIT + https://github.com/late4dtrain/result + https://github.com/late4dtrain/result + git + result object + Late4dTrain.Result + 0.0.1 + 0.0.1 + 0.0.1 + MIT + + + diff --git a/Late4dTrain.Functional.Result/Result.cs b/Late4dTrain.Result/Result.cs similarity index 93% rename from Late4dTrain.Functional.Result/Result.cs rename to Late4dTrain.Result/Result.cs index 105c28b..d999413 100644 --- a/Late4dTrain.Functional.Result/Result.cs +++ b/Late4dTrain.Result/Result.cs @@ -1,65 +1,65 @@ -namespace Late4dTrain.Functional; - -public class Result -{ - private readonly TError? _error; - - protected Result(bool isSuccess, TError? error) - { - if (isSuccess && error is { }) - throw new InvalidOperationException(); - - if (!isSuccess && error is null) - throw new InvalidOperationException(); - - IsSuccess = isSuccess; - _error = error; - } - - public TError Error => _error ?? throw new InvalidOperationException(); - - public bool IsSuccess { get; } - - public static Result Fail(TError error) => new(false, error); - - public static Result Fail(TError error) => new(default, false, error); - - public static Result Ok() => new(true, default); - - public static Result Ok(T value) => new(value, true, default); - - public Result OnSuccess(Action action) - { - if (IsSuccess) - action(); - - return this; - } - - public Result OnFailure(Action action) - { - if (!IsSuccess) - action(_error!); - - return this; - } -} - -public class Result : Result -{ - private readonly TValue? _value; - - public Result(TValue? value, bool isSuccess, TError? error) - : base(isSuccess, error) => - _value = value; - - public TValue Value => !IsSuccess ? throw new InvalidOperationException(): _value!; - - public Result OnSuccess(Action action) - { - if (IsSuccess) - action(_value!); - - return this; - } -} +namespace Late4dTrain; + +public class Result +{ + private readonly TError? _error; + + protected Result(bool isSuccess, TError? error) + { + if (isSuccess && error is { }) + throw new InvalidOperationException(); + + if (!isSuccess && error is null) + throw new InvalidOperationException(); + + IsSuccess = isSuccess; + _error = error; + } + + public TError Error => _error ?? throw new InvalidOperationException(); + + public bool IsSuccess { get; } + + public static Result Fail(TError error) => new(false, error); + + public static Result Fail(TError error) => new(default, false, error); + + public static Result Ok() => new(true, default); + + public static Result Ok(T value) => new(value, true, default); + + public Result OnSuccess(Action action) + { + if (IsSuccess) + action(); + + return this; + } + + public Result OnFailure(Action action) + { + if (!IsSuccess) + action(_error!); + + return this; + } +} + +public class Result : Result +{ + private readonly TValue? _value; + + public Result(TValue? value, bool isSuccess, TError? error) + : base(isSuccess, error) => + _value = value; + + public TValue Value => !IsSuccess ? throw new InvalidOperationException(): _value!; + + public Result OnSuccess(Action action) + { + if (IsSuccess) + action(_value!); + + return this; + } +} diff --git a/README.md b/README.md index 4b039e6..2086e6a 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Late4dTrain.Functional.Result -[![.NET](https://github.com/late4dtrain/functional-result/actions/workflows/ci.yml/badge.svg)](https://github.com/late4dtrain/functional-result/actions/workflows/ci.yml) -[![Release to Nuget](https://github.com/late4dtrain/functional-result/actions/workflows/release.yml/badge.svg)](https://github.com/late4dtrain/functional-result/actions/workflows/release.yml) -[![NuGet version (GSoulavy.Csv.Net)](https://img.shields.io/nuget/v/Late4dTrain.Functional.Result.svg?style=flat-square)](https://www.nuget.org/packages/Late4dTrain.Functional.Result/) +[![.NET](https://github.com/late4dtrain/result/actions/workflows/ci.yml/badge.svg)](https://github.com/late4dtrain/result/actions/workflows/ci.yml) +[![Release to Nuget](https://github.com/late4dtrain/result/actions/workflows/release.yml/badge.svg)](https://github.com/late4dtrain/result/actions/workflows/release.yml) +[![NuGet version (GSoulavy.Csv.Net)](https://img.shields.io/nuget/v/Late4dTrain.Result.svg?style=flat-square)](https://www.nuget.org/packages/Late4dTrain.Result/) -Functional Result Object +Result Object