Untitled

 avatar
unknown
plain_text
5 months ago
1.8 kB
6
Indexable
public record Ok200();
public record Ok207();

public record Error401() : ResultError("a");
public record Error404() : ResultError("b");

public class Test
{
    public async Task<Result<OneOf<Ok200,Ok207>>> TestAsync()
    {
        var code = 200;

        if (code == 200)
        {
            return OneOf<Ok200, Ok207>.FromT0(new Ok200());
        }
        
        if (code == 204)
        {
            return OneOf<Ok200, Ok207>.FromT1(new Ok207());
        }
        
        if (code == 401)
        {
            return Result<OneOf<Ok200, Ok207>>.FromError(new Error401());
        }
        
        if (code == 404)
        {
            return Result<OneOf<Ok200, Ok207>>.FromError(new Error404());
        }
        
        return Result<OneOf<Ok200, Ok207>>.FromError(new InvalidOperationError("Unknown code"));
    }

    public async Task ClientMethod()
    {
        var result = await TestAsync();

        // jeśli był sukces (czyli mamy instancję OneOf w środku resulta w propsie Entity)
        if (result.IsDefined(out var success))
        {
            if (success.TryPickT0(out var ok200, out var ok207))
            {
                // Handle Ok200
            }
            else
            {
                // Handle Ok207
            }
        }
        else
        {
            // Handle Error
            
            if (result.Error is Error401 error401)
            {
                // Handle Error401
            }
            else if (result.Error is Error404 error404)
            {
                // Handle Error404
            }
            else
            {
                // Handle other errors
            }
        }
    }
}
Editor is loading...
Leave a Comment