public static T Match <T>(this MyError myError, Func <MyError.Generic_, T> generic, Func <MyError.NotFound_, T> notFound, Func <MyError.NotAuthorized_, T> notAuthorized, Func <MyError.Aggregated_, T> aggregated) { switch (myError.UnionCase) { case MyError.UnionCases.Generic: return(generic((MyError.Generic_)myError)); case MyError.UnionCases.NotFound: return(notFound((MyError.NotFound_)myError)); case MyError.UnionCases.NotAuthorized: return(notAuthorized((MyError.NotAuthorized_)myError)); case MyError.UnionCases.Aggregated: return(aggregated((MyError.Aggregated_)myError)); default: throw new ArgumentException($"Unknown type derived from MyError: {myError.GetType().Name}"); } }
public static async Task <T> Match <T>(this MyError myError, Func <MyError.Generic_, Task <T> > generic, Func <MyError.NotFound_, Task <T> > notFound, Func <MyError.NotAuthorized_, Task <T> > notAuthorized, Func <MyError.Aggregated_, Task <T> > aggregated) { switch (myError.UnionCase) { case MyError.UnionCases.Generic: return(await generic((MyError.Generic_) myError).ConfigureAwait(false)); case MyError.UnionCases.NotFound: return(await notFound((MyError.NotFound_) myError).ConfigureAwait(false)); case MyError.UnionCases.NotAuthorized: return(await notAuthorized((MyError.NotAuthorized_) myError).ConfigureAwait(false)); case MyError.UnionCases.Aggregated: return(await aggregated((MyError.Aggregated_) myError).ConfigureAwait(false)); default: throw new ArgumentException($"Unknown type derived from MyError: {myError.GetType().Name}"); } }