From f6ae9218e65a2b1fbbe7c3be99e3b9825a509fcf Mon Sep 17 00:00:00 2001 From: Andy Gocke Date: Thu, 13 Feb 2025 23:27:58 -0800 Subject: [PATCH] Add Result type --- src/Result/Result.cs | 21 +++++++++++++++++++++ src/Result/StaticCs.Result.csproj | 21 +++++++++++++++++++++ static-cs.sln | 7 +++++++ 3 files changed, 49 insertions(+) create mode 100644 src/Result/Result.cs create mode 100644 src/Result/StaticCs.Result.csproj diff --git a/src/Result/Result.cs b/src/Result/Result.cs new file mode 100644 index 0000000..dfd9706 --- /dev/null +++ b/src/Result/Result.cs @@ -0,0 +1,21 @@ +using System; + +namespace StaticCs; + +[Closed] +public abstract record Result +{ + private Result() { } + + public sealed record Ok(TOk Value) : Result; + public sealed record Err(TErr Value) : Result; + + public static implicit operator Result(TOk success) => new Ok(success); + public static implicit operator Result(TErr error) => new Err(error); + + public TOk Unwrap() => this switch + { + Ok(var ok) => ok, + _ => throw new InvalidOperationException(), + }; +} \ No newline at end of file diff --git a/src/Result/StaticCs.Result.csproj b/src/Result/StaticCs.Result.csproj new file mode 100644 index 0000000..68abb4d --- /dev/null +++ b/src/Result/StaticCs.Result.csproj @@ -0,0 +1,21 @@ + + + + net8.0 + 0.1.0 + true + BSD-3-Clause + https://github.com/agocke/static-cs + + + + net8.0 + enable + + + + + + + + diff --git a/static-cs.sln b/static-cs.sln index b071982..bed3c64 100644 --- a/static-cs.sln +++ b/static-cs.sln @@ -19,6 +19,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StaticCs", "src\StaticCs\St EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StaticCs.TrimmableConverter", "src\StaticCs.TrimmableConverter\StaticCs.TrimmableConverter.csproj", "{B29FFDB1-7006-42FA-9647-3101CDFB364F}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StaticCs.Result", "src\Result\StaticCs.Result.csproj", "{8FF14261-BA9C-487F-8581-3F7D978EA772}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -52,6 +54,10 @@ Global {B29FFDB1-7006-42FA-9647-3101CDFB364F}.Debug|Any CPU.Build.0 = Debug|Any CPU {B29FFDB1-7006-42FA-9647-3101CDFB364F}.Release|Any CPU.ActiveCfg = Release|Any CPU {B29FFDB1-7006-42FA-9647-3101CDFB364F}.Release|Any CPU.Build.0 = Release|Any CPU + {8FF14261-BA9C-487F-8581-3F7D978EA772}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8FF14261-BA9C-487F-8581-3F7D978EA772}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8FF14261-BA9C-487F-8581-3F7D978EA772}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8FF14261-BA9C-487F-8581-3F7D978EA772}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(NestedProjects) = preSolution {44789D3C-044A-457B-9F5F-47209D0D5C21} = {E383093D-99E0-4B3D-8B3B-C960B7B7C426} @@ -60,5 +66,6 @@ Global {7FD737C0-6ED4-44E9-BC40-096BFD16DBDA} = {E9E2044F-C0D2-4270-A896-E9917D1331D0} {FD238201-2E9D-4066-83BB-43D3DD49EC24} = {E383093D-99E0-4B3D-8B3B-C960B7B7C426} {B29FFDB1-7006-42FA-9647-3101CDFB364F} = {E383093D-99E0-4B3D-8B3B-C960B7B7C426} + {8FF14261-BA9C-487F-8581-3F7D978EA772} = {E383093D-99E0-4B3D-8B3B-C960B7B7C426} EndGlobalSection EndGlobal