daver32 / InterfaceGenerator

A simple source generator that creates interfaces by implementations.
MIT License
36 stars 13 forks source link

Generated code doesn't handle default values for enums #24

Open GrantByrn3 opened 8 months ago

GrantByrn3 commented 8 months ago

We have our own custom set of log events that we keep track of in a database. The severity is stored with a custom LogLevel enum:

public enum LogLevel
{
    Trace = 0,
    Debug = 1,
    Information = 2,
    Warning = 3,
    Error = 4,
    Critical = 5,
    None = 6
}

For the DAL class, we have a method that has this format: public async Task<IEnumerable<LogMessage>> GetLogsForObject(string objectType, long objectId, LogLevel minLogLevel = LogLevel.Information)

It generates the following interface:

public partial interface ILogMessageRepository
    {
        System.Threading.Tasks.Task<System.Collections.Generic.IEnumerable<TSWCloud.Domain.Logging.LogMessage>> GetLogsForObject(string objectType, long objectId, TSWCloud.Domain.Logging.LogLevel minLogLevel = 2);
    }

When compiling, this gives the error: A value of type 'int' cannot be used as a default parameter because there is no standard conversions to type LogLevel

Instead, it should generate the following interface:

public interface ILogMessageRepository
{
    Task<IEnumerable<LogMessage>> GetLogsForObject(string objectType, long objectId,
        LogLevel minLogLevel = LogLevel.Information);
}