# PrintLib
PrintLib is a libary for rust which makes printing easy.
> This document is and (works) only for the newest ``PrintLib`` version
[Github reposentory](https://github.com/Toni-Graphics/PrintLib)
## Install
To add PrintLib to your project, go into your project folder and execute:
```bash
cargo add PrintLib
```
Then you can import PrintLib just like other crates:
```rust
use PrintLib::*;
```
## Examples
Link to the examples:
## Documentation
This is the official documentation for the PrintLib.
### Error
The module ``PrintLib::error`` is the module with which you can build error messages.
The ``ErrorFactory`` class
| Function name | Parmaters | Description |
|---------------|-----------|-------------|
|``new``|ecode: ``String``, msg: ``String``| This is the initializer of the class. It creates a new ErrorFactory with the error-code ``ecode`` and the error message ``msg``|
|``add_code_line``|line: ``String``, display_line_no: ``bool``, line_no: ``usize``, display_add: ``bool``|This function adds a new line to the error message. The parameter ``line`` is the code line of which the error message is specified. ``display_lin_no`` means if the line number (parameter ``line_no`` is the line number) is shown. ``display_add`` means if a +++ needs to be shown (it is good for showing potential fixes).|
|``add_where{``file``}:{``line``}:{``where_start``} to the error message|
|``add_arrow_w``|file: ``String``, line: ``usize``, |Add adds an arrow in the format -->{``file``}:{``line``} to the error message|
|``print``||Prints the error message|
### Logger
The module ``PrintLib::logr`` is the module with which you can use the logger.
#### The ``Logger`` Class
| Function name | Parmaters | Description |
|---------------|-----------|-------------|
|``new``| conf | Is the initializer of the class. The parameter ``conf`` is the ``LoggerConfig`` for the class. Returns a new Instance.|
|``debug``|msg: ``String``| Prints the message ``msg`` in level debug|
|``info``|msg: ``String``| Prints the message ``msg`` in level info|
|``warn``|msg: ``String``| Prints the message ``msg`` in level warning|
|``error``|msg: ``String``| Prints the message ``msg`` in level error|
#### The ``def`` function
Returns ``Logger`` with the default configuration
#### The ``LoggerConfig`` struct
| Name | Type | Description |
|---------------|---------|-----------|
|``time``|``bool``|If the time should be presented in logger messages|
|``info_string``|``String``|String which indicates that the message is level info (Normal: [INFO ])|
|``debug_string``|``String``|String which indicates that the message is level debug (Normal: [DEBUG ])|
|``warn_string``|``String``|String which indicates that the message is level warn (Normal: [WARN!] )|
|``err_string``|``String``|String which indicates that the message is level error (Normal: [[ERR!] ])|
|``info_color``|``LoggerColor``|The color in which the level indicator ([xyz]) at level info is|
|``debug_color``|``LoggerColor``|The color in which the level indicator ([xyz]) at level debug is|
|``warn_color``|``LoggerColor``|The color in which the level indicator ([xyz]) at level warn is|
|``err_color``|``LoggerColor``|The color in which the level indicator ([xyz]) at level err is|
#### The ``LoggerColor`` struct
| Name | Type | Description |
|---------------|---------|-----------|
|``r``|``u8``|The red channel|
|``g``|``u8``|The green channel|
|``b``|``u8``|The blue channel|
### Color
The module ``PrintLib::colorize`` is the module with which you can colorize your ``&str``s.
#### The ``Colorize`` trait
| Function name | Parameters | Return type | Description |
|---------------|------------|-----------|------------|
|``color``|``&self``, r: ``i16``, g: ``i16``, b: ``116``|``String``|Turns the colorof the string to the specified rgb-values|
|``black``|``&self``|``String``| Makes the string black|
|``red``|``&self``|``String``| Makes the string red|
|``green``|``&self``|``String``| Makes the string green|
|``yellow``|``&self``|``String``| Makes the string yellow|
|``blue``|``&self``|``String``| Makes the string blue|
|``magenta``|``&self``|``String``| Makes the string magenta|
|``cyan``|``&self``|``String``| Makes the string cyan|
|``white``|``&self``|``String``| Makes the string white|
|``gray``|``&self``|``String``| Makes the string gray|
|``bold``|``&self``|``String``| Makes the string bold|
|``italic``|``&self``|``String``| Makes the string italic|
|``underline``|``&self``|``String``| Makes the string underline|
|``strike``|``&self``|``String``| Makes the string strike|
|``bg_black``|``&self``|``String``| Makes the bg of the string black|
|``bg_red``|``&self``|``String``| Makes the bg of the string red|
|``bg_green``|``&self``|``String``| Makes the bg of the string green|
|``bg_yellow``|``&self``|``String``| Makes the bg of the string yellow|
|``bg_blue``|``&self``|``String``| Makes the bg of the string blue|
|``bg_magenta``|``&self``|``String``| Makes the bg of the string magenta|
|``bg_cyan``|``&self``|``String``| Makes the bg of the string cyan|
|``bg_white``|``&self``|``String``| Makes the bg of the string white|
|``bg_gray``|``&self``|``String``| Makes the bg of the string gray|
|``bg_bold``|``&self``|``String``| Makes the bg of the string bold|
#### The ``Style`` struct
| Name | Type | Description |
|-----------|--------|------------|
|``bold``|``bool``|Is the string bold|
|``italic``|``bool``|Is the string italic|
|``underlined``|``bool``|Is the string underlined|
|``strike``|``bool``|Is the string striketrough|
#### The ``ColoredString`` struct
| Name | Type | Description |
|-----------|--------|------------|
|``r``|``i16``|The red color channel|
|``g``|``i16``|The red green channel|
|``b``|``i16``|The red blue channel|
> Side note: If the red channel is -1 there will be no color, but instead a style (like bold, italic, etc.) applied to
| Function name | Parameters | Return type | Description |
|---------------|------------|-----------|------------|
|``new``|r: ``i16``, g: ``i16``, b: ``i16``, _attr: ``Style``, _str: ``&str``|``Colored String``|Initialiser of the colored string class.|
|``to_string``||``String``|Converts the ColoredString to a normal String|
#### The ColorEncoder
``ColorEncoder::encode`` is the function with wich you can turn a simple string with the color names in it into an formated string.
Args: ``str``: ``&str`` or ``String``
Description: Formats the given string in the correct color which are specified in the string
Colors:
| How it looks like in the string | Actual color |
|---------------------------------|--------------|
|````|black|
|````|red|
|````|blue|
|````|green|
|````|yellow|
|````|magenta|
|````|cyan|
|````|white|
|````|gray|
|````|bold|
|````|italic|
|````|underline|
|````|striketrough|
|``<&hex>``|hex color|
### Emojis
The module ``PrintLib::emoji`` is the module with which you can make printing emojis easyer.
#### The class ``EmojiMaker``
| Function name | Parameters | Return type | Description |
|---------------|------------|-----------|------------|
|``new``||``EmojiMaker``|Creates a new EmojiMaker|
|``add``|name: ``&str``, emoji: ``&str``||Adds an new emoji with the name ``name``|
|``get``|name: ``str``|``String``|Gets the emoji with the name ``name`` from the intern hashmap|
### Arg
The module ``PrintLib::arg`` is the module with which makes evrything releated to args easyer.
#### The class ``UsageFactory``
| Function name | Parameters | Return type | Description |
|---------------|------------|-----------|------------|
|``new``|name: ``&str``, app_name: ``&str``|``UsageFactory``|Creates a new UsageFactory. ``name`` is the name of your product/application. ``app_name`` is how you would run your programm (e.g for Cargo it would be ``cargo``).|
|``add_cmd``|``&mut self``, name: ``&str``, description: ``&str``||Adds a new command with the name name and description description|
|``add_opt``|``&mut self``, name: ``&str``, description: ``&str``||Adds a new option with the name name and description description|
|``print``|``&mut self``||Prints the usage|
## Errors
Known:
> When bg is changed color do not work proberly