commandlineparser / commandlineparser/commandline

Consider custom parsers/converters/handler for types?

Aberta
#711 1 comentário 10 reações 0 responsáveis Ver no GitHub
Linguagem predominante
C#
Estrelas
4.8k
Forks
478
Métricas de merge de PRs
Nenhum PR com merge em 30d

Descrição

I would love to be able to do:

```c#
public class Options
{
[Option('o', "out", Required = true, HelpText = "Output file")]
public string OutFile { get; set; }
[Option('d', "duration", Required = false, Default = "1:00:00", HelpText = "Duration")]
public TimeSpan Duration { get; set; }
[Option('e', "endpoint", Required = true, HelpText = "IP Endpoint (:)")]
public IPEndPoint Endpoint { get; set; }
}
```

Where I can use types like `TimeSpan` and `IPEndPoint` or any other type. Ofcourse, we would need to be able to specify a parser/converter/handler/whatever that takes the value and converts it to the desired type. I imagine it be like:

```c#
public class Options
{
[Option('o', "out", Required = true, HelpText = "Output file")]
public string OutFile { get; set; }
[Option('d', "duration", Required = false, Default = "1:00:00", HelpText = "Duration", Converter = typeof(MyTimeSpanConverter))]
public TimeSpan Duration { get; set; }
[Option('e', "endpoint", Required = true, HelpText = "IP Endpoint (:)", Converter = typeof(MyIPEndpointConverter))]
public IPEndPoint Endpoint { get; set; }
}
```

Next these 'converters' should implement something like an IConvert that defines a method `T Convert(string value)` where they take a string (the commandline argument) and convert to the desired type. Another option would be to not use the attributes but be able to specify handlers like:

```c#
Parser.Default
.Register()
.Register()
.ParseArguments(args)
....
```

Would that be something that you would consider? (Maybe not exactly following the idea given above, but the broader idea of being able to handle custom types).

Guia de contribuição

Nenhum guia de contribuição indexado para este repositório

Direção de pesquisa

Nenhum arquivo de implementação ou teste é mencionado. Comece em Parser.Default e ParseArguments, depois rastreie como as strings de opções são convertidas atualmente e compare as abordagens propostas baseadas em atributos para Converter e registro. O trabalho estará concluído quando tipos personalizados como TimeSpan e IPEndPoint puderem ser tratados por meio de uma API definida e testada.

Escrita pelo modelo de indexação a partir do texto da issue.

Avaliação

Stack de tecnologia
csharp
Domínio
cli
Tipo de issue
Funcionalidade
Dificuldade
5/5
Tempo estimado
Mais de uma semana
Status de atividade
Estagnada
Clareza
Precisa de esclarecimento
Facilidade para iniciantes
25/100

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.