using System.Collections.Generic; using System.Threading.Tasks; namespace Sufi.Demo.PeopleDirectory.Shared.Wrapper { public class Result : IResult { public Result() { } public List Messages { get; set; } = []; public bool Succeeded { get; set; } public static IResult Fail() { return new Result { Succeeded = false }; } public static IResult Fail(string message) { return new Result { Succeeded = false, Messages = [message] }; } public static IResult Fail(List messages) { return new Result { Succeeded = false, Messages = messages }; } public static Task FailAsync() { return Task.FromResult(Fail()); } public static Task FailAsync(string message) { return Task.FromResult(Fail(message)); } public static Task FailAsync(List messages) { return Task.FromResult(Fail(messages)); } public static IResult Success() { return new Result { Succeeded = true }; } public static IResult Success(string message) { return new Result { Succeeded = true, Messages = [message] }; } public static Task SuccessAsync() { return Task.FromResult(Success()); } public static Task SuccessAsync(string message) { return Task.FromResult(Success(message)); } } public class Result : Result, IResult where T : notnull { public Result() { } public T Data { get; set; } = default!; public new static Result Fail() { return new Result { Succeeded = false }; } public new static Result Fail(string message) { return new Result { Succeeded = false, Messages = [message] }; } public new static Result Fail(List messages) { return new Result { Succeeded = false, Messages = messages }; } public new static Task> FailAsync() { return Task.FromResult(Fail()); } public new static Task> FailAsync(string message) { return Task.FromResult(Fail(message)); } public new static Task> FailAsync(List messages) { return Task.FromResult(Fail(messages)); } public new static Result Success() { return new Result { Succeeded = true }; } public new static Result Success(string message) { return new Result { Succeeded = true, Messages = [message] }; } public static Result Success(T data) { return new Result { Succeeded = true, Data = data }; } public static Result Success(T data, string message) { return new Result { Succeeded = true, Data = data, Messages = [message] }; } public static Result Success(T data, List messages) { return new Result { Succeeded = true, Data = data, Messages = messages }; } public new static Task> SuccessAsync() { return Task.FromResult(Success()); } public new static Task> SuccessAsync(string message) { return Task.FromResult(Success(message)); } public static Task> SuccessAsync(T data) { return Task.FromResult(Success(data)); } public static Task> SuccessAsync(T data, string message) { return Task.FromResult(Success(data, message)); } } }