Skip to content

Commit 09b57c2

Browse files
authored
Add Result type (#25)
1 parent c91c8a2 commit 09b57c2

File tree

3 files changed

+49
-0
lines changed

3 files changed

+49
-0
lines changed

src/Result/Result.cs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
using System;
2+
3+
namespace StaticCs;
4+
5+
[Closed]
6+
public abstract record Result<TOk, TErr>
7+
{
8+
private Result() { }
9+
10+
public sealed record Ok(TOk Value) : Result<TOk, TErr>;
11+
public sealed record Err(TErr Value) : Result<TOk, TErr>;
12+
13+
public static implicit operator Result<TOk, TErr>(TOk success) => new Ok(success);
14+
public static implicit operator Result<TOk, TErr>(TErr error) => new Err(error);
15+
16+
public TOk Unwrap() => this switch
17+
{
18+
Ok(var ok) => ok,
19+
_ => throw new InvalidOperationException(),
20+
};
21+
}

src/Result/StaticCs.Result.csproj

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<TargetFrameworks>net8.0</TargetFrameworks>
5+
<Version>0.1.0</Version>
6+
<IsPackable>true</IsPackable>
7+
<PackageLicenseExpression>BSD-3-Clause</PackageLicenseExpression>
8+
<RepositoryUrl>https://github.com/agocke/static-cs</RepositoryUrl>
9+
</PropertyGroup>
10+
11+
<PropertyGroup>
12+
<TargetFramework>net8.0</TargetFramework>
13+
<Nullable>enable</Nullable>
14+
</PropertyGroup>
15+
16+
<ItemGroup>
17+
<ProjectReference Include="..\StaticCs\StaticCs.csproj" />
18+
<Compile Include="..\StaticCs.ContentFiles\*.cs" />
19+
</ItemGroup>
20+
21+
</Project>

static-cs.sln

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StaticCs", "src\StaticCs\St
1919
EndProject
2020
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StaticCs.TrimmableConverter", "src\StaticCs.TrimmableConverter\StaticCs.TrimmableConverter.csproj", "{B29FFDB1-7006-42FA-9647-3101CDFB364F}"
2121
EndProject
22+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StaticCs.Result", "src\Result\StaticCs.Result.csproj", "{8FF14261-BA9C-487F-8581-3F7D978EA772}"
23+
EndProject
2224
Global
2325
GlobalSection(SolutionConfigurationPlatforms) = preSolution
2426
Debug|Any CPU = Debug|Any CPU
@@ -52,6 +54,10 @@ Global
5254
{B29FFDB1-7006-42FA-9647-3101CDFB364F}.Debug|Any CPU.Build.0 = Debug|Any CPU
5355
{B29FFDB1-7006-42FA-9647-3101CDFB364F}.Release|Any CPU.ActiveCfg = Release|Any CPU
5456
{B29FFDB1-7006-42FA-9647-3101CDFB364F}.Release|Any CPU.Build.0 = Release|Any CPU
57+
{8FF14261-BA9C-487F-8581-3F7D978EA772}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
58+
{8FF14261-BA9C-487F-8581-3F7D978EA772}.Debug|Any CPU.Build.0 = Debug|Any CPU
59+
{8FF14261-BA9C-487F-8581-3F7D978EA772}.Release|Any CPU.ActiveCfg = Release|Any CPU
60+
{8FF14261-BA9C-487F-8581-3F7D978EA772}.Release|Any CPU.Build.0 = Release|Any CPU
5561
EndGlobalSection
5662
GlobalSection(NestedProjects) = preSolution
5763
{44789D3C-044A-457B-9F5F-47209D0D5C21} = {E383093D-99E0-4B3D-8B3B-C960B7B7C426}
@@ -60,5 +66,6 @@ Global
6066
{7FD737C0-6ED4-44E9-BC40-096BFD16DBDA} = {E9E2044F-C0D2-4270-A896-E9917D1331D0}
6167
{FD238201-2E9D-4066-83BB-43D3DD49EC24} = {E383093D-99E0-4B3D-8B3B-C960B7B7C426}
6268
{B29FFDB1-7006-42FA-9647-3101CDFB364F} = {E383093D-99E0-4B3D-8B3B-C960B7B7C426}
69+
{8FF14261-BA9C-487F-8581-3F7D978EA772} = {E383093D-99E0-4B3D-8B3B-C960B7B7C426}
6370
EndGlobalSection
6471
EndGlobal

0 commit comments

Comments
 (0)