Expand description
§Module :: wca
The tool to make CLI ( commands user interface ). It is able to aggregate external binary applications, as well as functions, which are written in your language.
§Sample
#[ cfg( not( feature = "no_std" ) ) ]
{
use wca::{ Args, Context, Type };
fn main()
{
let ca = wca::CommandsAggregator::former()
.command( "echo" )
.hint( "prints all subjects and properties" )
.subject().hint( "Subject" ).kind( Type::String ).optional( true ).end()
.property( "property" ).hint( "simple property" ).kind( Type::String ).optional( true ).end()
.routine( | args : Args, props | { println!( "= Args\n{args:?}\n\n= Properties\n{props:?}\n" ) } )
.end()
.command( "inc" )
.hint( "This command increments a state number each time it is called consecutively. (E.g. `.inc .inc`)" )
.routine( | ctx : Context | { let i : &mut i32 = ctx.get_or_default(); println!( "i = {i}" ); *i += 1; } )
.end()
.command( "error" )
.hint( "prints all subjects and properties" )
.subject().hint( "Error message" ).kind( Type::String ).optional( true ).end()
.routine( | args : Args | { println!( "Returns an error" ); Err( format!( "{}", args.get_owned::< String >( 0 ).unwrap_or_default() ) ) } )
.end()
.command( "exit" )
.hint( "just exit" )
.routine( || { println!( "exit" ); std::process::exit( 0 ) } )
.end()
.perform();
let args = std::env::args().skip( 1 ).collect::< Vec< String > >();
ca.perform( args ).unwrap();
}
}§To add to your project
cargo add wca
§Try out from the repository
git clone https://github.com/Wandalen/wTools
cd wTools
cd examples/wca_trivial
cargo run
§Diagrams
§Class diagram
Parser
This component takes in raw strings of text and converts them into
ParsedCommandobjects. These objects contain all of the information needed to represent a command, but they haven’t been validated or processed in any way yet.
Grammar
Contains available commands configured by the user.
Once the
ParsedCommandobjects have been generated, theGrammarcomponent steps in. This component takes in theParsedCommand-s and converts them intoVerifiedCommandobjects, which contain subject and property values that have been validated against a set of pre-defined grammar. This ensures that the user’s input is structured correctly and can be understood by the system.
Executor
Contains available routines configured by the user.
Once the
VerifiedCommandobjects have been generated, theExecutorcomponent takes over. This component converts theGrammarCommandsintoExecutableCommand_objects, which contain the actual routines that will be executed at runtime. This is where the system takes action based on the user’s input.
CommandsAggregator
Finally, the
CommandsAggregatorcomponent brings everything together. This component is responsible for configuring theParser,Grammar, andExecutorcomponents based on the user’s needs. It also manages the entire pipeline of processing, from parsing the raw text input to executing the final command(parse -> validate -> execute).
§Sequence diagram
Modules§
- Commands aggregator library.
- Exposed namespace of the module.
- Orphan namespace of the module.
- Prelude to use essentials:
use my_module::prelude::*. - Protected namespace of the module.
- Tools
Structs§
- Command Args
- Command descriptor.
- Object to form Command. If field’s values is not set then default value of the field is set.
- The
CommandsAggregatorstruct is responsible for aggregating all commands that the user defines, and for parsing and executing them. It is the main entry point of the library. - Object to form CommandsAggregator. If field’s values is not set then default value of the field is set.
- Container for contexts values
- A collection of commands.
- Executor that is responsible for executing the program’s commands. It uses the given
Contextto store and retrieve values during runtime. - Routine handle.
- A structure representing an input with a single string value.
- Represents a parsed command that has been extracted from an input string by a
Parser. Parserprovides parsing command strings intoParsedCommandobjects. It allows you to specify the symbols that will be used to interpret the command string, such as the command delimiter, property delimiter, and namespace delimiter.- Represents a program that contains one or more namespaces, where each namespace contains a list of commands.
- Command Properties
- Represents the state of the program’s runtime, including the current context, execution position, and namespace of executable commands.
- State of a program runtime
- Represents a grammatically correct command with a phrase descriptor, a list of command subjects, and a set of command options.
- Converts a
ParsedCommandto aVerifiedCommandby performing validation and type casting on values.
Enums§
- Errors that can occur in application.
- Available help commands variants
- Represents different types of routines.
- Available types that can be converted to a
Value - Validation errors that can occur in application.
- Container for a
Valueof a specific type
Traits§
- Can parse Commands
- A trait for converting various types into
Input. - Can parser Programs
- Can be implemented for something that represents a type of value
Functions§
- Ask use input from standard input.