Skip to content

ErrorResult source generator seems to produce invalid output #14

Description

@Felix-CodingClimber

Missmatch between generic type parameter naming T and TValue

//-----------------------------------------------------
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior
// and will be lost when the code is regenerated.
// <auto-generated />
//-----------------------------------------------------
#nullable enable

using System.Diagnostics.CodeAnalysis;
using DotNetElements.Core.ResultObject;

namespace PocketClimber.Playground
{
    internal partial class DeserializeResult<T> : ErrorResult<string>
    {
        protected readonly TValue Value;
    
        protected DeserializeResult(bool isOk, TValue value, string error) : base(isOk, error)
        {
            Value = value;
        }
    
        public static DeserializeResult<T> Ok(TValue value) => new(true, value, default!);
        public static DeserializeResult<T> Fail(string error) => new(false, default!, error);
    
        // Optional helper functions 
        public bool TryGetValue([NotNullWhen(true)] out TValue? value, [NotNullWhen(false)] out string? error)
        {
            value = Value;
            error = Error;
    
            return IsOk;
        }
    
        public TValue GetValueUnsafe() => Value ?? throw new ResultFailException();
    
        // Implicit conversions
        public static implicit operator DeserializeResult<T>(Result<TValue> value) => new(true, value.GetValueUnsafe(), default!);
        public static implicit operator DeserializeResult<T>(TValue value) => new(true, value, default!);
        public static implicit operator DeserializeResult<T>(DeserializeResultHelper.DeserializeResult result) => result.IsFail ? new(false, default!, result.GetErrorUnsafe()) : throw new ResultException("Can not convert a successful result to a result with a value");
    
        // Optional conversions
        public Result AsResult() => IsOk ? Result.Ok() : Result.Fail();
    }
        
    internal static partial class DeserializeResultHelper
    {
        public class DeserializeResult : ErrorResult<string>
        {
            private DeserializeResult(bool isOk, string error) : base(isOk, error) { }

            public static DeserializeResult Ok() => new(true, default!);
            public static DeserializeResult Fail(string error) => new(false, error);

            // Implicit conversions
            public static implicit operator DeserializeResult(ResultOk _) => new(true, default!);

            // Optional conversions 
            public Result AsResult => IsOk ? Result.Ok() : Result.Fail();
        }

        public static DeserializeResult Fail(string error) => DeserializeResult.Fail(error);
        public static DeserializeResult Fail(string error, Action logAction)
        {
            logAction.Invoke();

            return DeserializeResult.Fail(error);
        }

        public static DeserializeResult<T> OkIf<TValue>(bool isSuccess, TValue value, string error)
        {
            return isSuccess ? value : DeserializeResult<T>.Fail(error);
        }

        public static DeserializeResult<T> OkIf<TValue>(Func<bool> predicate, TValue value, string error)
        {
            return predicate.Invoke() ? value : DeserializeResult<T>.Fail(error);
        }

        public static DeserializeResult<T> OkIfNotNull<TValue>(TValue? value, string error)
        {
            return value is not null ? value : DeserializeResult<T>.Fail(error);
        }
    }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions