AutoSpectre.SourceGeneration 0.3.7.2

There is a newer version of this package available.
See the version list below for details.
dotnet add package AutoSpectre.SourceGeneration --version 0.3.7.2
NuGet\Install-Package AutoSpectre.SourceGeneration -Version 0.3.7.2
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="AutoSpectre.SourceGeneration" Version="0.3.7.2" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add AutoSpectre.SourceGeneration --version 0.3.7.2
#r "nuget: AutoSpectre.SourceGeneration, 0.3.7.2"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install AutoSpectre.SourceGeneration as a Cake Addin
#addin nuget:?package=AutoSpectre.SourceGeneration&version=0.3.7.2

// Install AutoSpectre.SourceGeneration as a Cake Tool
#tool nuget:?package=AutoSpectre.SourceGeneration&version=0.3.7.2

AutoSpectre Source Generation

This allows you to decorate a class with the AutoSpectreForm attribute and properties on that class with AskAttribute and behind the scenes a Form will be generated to request input using Spectre.Console

Example

Code

 [AutoSpectreForm]
 public class Someclass
 {
     [Ask(AskType = AskType.Normal, Title = "Add item")] 
     public int[] IntItems { get; set; } = Array.Empty<int>();

     [Ask(Title = "Enter first name")]
     public string? FirstName { get; set; }

     [Ask]
     public bool LeftHanded { get; set; }

     [Ask(Title = "Choose your [red]value[/]")]
     public SomeEnum Other { get; set; }

     [Ask] 
     public Name Owner { get; set; } = new Name(); 

     [Ask]
     public IReadOnlyList<Name> Investors { get; set; } = new List<Name>();

     [Ask(AskType = AskType.Selection, SelectionSource = nameof(Items))]
     public string Item { get; set; } = string.Empty;

     public List<string> Items { get; } = new List<string>() { "Alpha", "Bravo", "Charlie" };
 }

Output

 public interface ISomeclassSpectreFactory
 {
     Someclass Get(Someclass destination = null);
 }

 public class SomeclassSpectreFactory : ISomeclassSpectreFactory
 {
     public Someclass Get(Someclass destination = null)
     {
         INameSpectreFactory NameSpectreFactory = new NameSpectreFactory();
         destination ??= new Test.Someclass();
         // Prompt for values for destination.IntItems
         {
             List<int> items = new List<int>();
             bool continuePrompting = true;
             do
             {
                 var item = AnsiConsole.Prompt(new TextPrompt<int>("Add item"));
                 items.Add(item);
                 continuePrompting = AnsiConsole.Confirm("Add more items?");
             }
             while (continuePrompting);
             int[] result = items.ToArray();
             destination.IntItems = result;
         }

         destination.FirstName = AnsiConsole.Prompt(new TextPrompt<string?>("Enter first name").AllowEmpty());
         destination.LeftHanded = AnsiConsole.Confirm("Enter [green]LeftHanded[/]");
         destination.Other = AnsiConsole.Prompt(new SelectionPrompt<SomeEnum>().Title("Choose your [red]value[/]").PageSize(10).AddChoices(Enum.GetValues<SomeEnum>()));
         {
             AnsiConsole.MarkupLine("Enter [green]Owner[/]");
             var item = NameSpectreFactory.Get();
             destination.Owner = item;
         }

         // Prompt for values for destination.Investors
         {
             List<Name> items = new List<Name>();
             bool continuePrompting = true;
             do
             {
                 {
                     AnsiConsole.MarkupLine("Enter [green]Investors[/]");
                     var newItem = NameSpectreFactory.Get();
                     items.Add(newItem);
                 }

                 continuePrompting = AnsiConsole.Confirm("Add more items?");
             }
             while (continuePrompting);
             System.Collections.Generic.IReadOnlyList<Test.Name> result = items;
             destination.Investors = result;
         }

         destination.Item = AnsiConsole.Prompt(new SelectionPrompt<string>().Title("Enter [green]Item[/]").PageSize(10).AddChoices(destination.Items.ToArray()));
         return destination;
     }
 }

Credits

Fear icons created by Smashicons - Flaticon

There are no supported framework assets in this package.

Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
0.9.0-preview-0.2 45 4/23/2024
0.8.1 109 2/5/2024
0.8.1-preview-01 78 2/4/2024
0.8.0 187 11/30/2023
0.8.0-preview.0.1 95 11/4/2023
0.7.0 260 10/3/2023
0.7.0-preview.0.8 65 10/2/2023
0.7.0-preview.0.7 60 10/2/2023
0.7.0-preview.0.6 66 10/1/2023
0.7.0-preview.0.5 67 9/26/2023
0.7.0-preview.0.4.2 62 9/20/2023
0.7.0-preview.0.3 49 9/18/2023
0.7.0-preview.0.2 68 9/15/2023
0.7.0-preview.0.1 79 9/14/2023
0.6.0 295 9/12/2023
0.6.0-preview.0.4 68 9/10/2023
0.6.0-preview.0.1 64 9/3/2023
0.5.3 277 8/28/2023
0.5.2 277 8/27/2023
0.5.1 272 8/25/2023
0.5.0 295 8/23/2023
0.4.0 311 8/15/2023
0.3.8 319 8/6/2023
0.3.7.2 188 7/29/2023
0.3.6.1 185 7/25/2023
0.3.5 150 7/24/2023
0.3.4 173 7/23/2023
0.3.3 160 7/23/2023
0.3.2 322 1/22/2023
0.3.1 334 1/16/2023
0.3.0 337 1/6/2023
0.2.0.2 326 12/14/2022
0.2.0.1 303 12/14/2022
0.1.6 363 12/2/2022
0.1.5 338 11/30/2022

Fixed so validation also works when using a class decorated with AutoSpectreForm in another form