# Motivation
**Trivet** provides two things.
- Simple tools for parsing strings, numbers, comments, keywords, and JSON
- A Rust library of tools for writing [recursive descent parsers][]
If you want to jump in to using **Trivet**, head to the [Cookbook](./cookbook.md) chapter.
The parsing tools provided are _low level tools_. **Trivet** is _not_ an easy to use library for writing a parser for a complex language, and is not a good choice for languages that need unbounded lookahead... but then what is?
On the other hand, you can parse many things without having to create a new parser. **Trivet** provides parsers (and in some cases generators) for many common structures, and can handle both UTF-8 and UTF-16 encoded text as input.
## Why Trivet
**Trivet** provides configurable parsers for many common structures, and can also generate text from the parsed values.
- strings of various forms
- floating point numbers in various radices
- integers in various radices
- times, dates, and combinations using RFC-3339
- keywords
- JSON
You can use **Trivet** to build your own parsers, but **Trivet** might not be the parsing library you want. You don't write a nice description of your language and then generate a parser from that description. **Trivet** gives you tools to peek at the stream and consume characters from the stream... and that's pretty much it.
The primary design goal of **Trivet** is _no external dependencies_ other than the Rust standard libraries.
If all that sounds good, then Welcome!
## Contents
The rest of this document provides a short overview of **Trivet**, then a more detailed look at the parsing primitives library, a look at support for number and string parsing, and then larger examples of building complete parsers. Finally there are notes on the implementation of **Trivet**.
Code samples found in this book are available in the distribution's `examples` folder and are named starting with `book_[chapter]`.
[recursive descent parsers]: https://en.wikipedia.org/wiki/Recursive_descent_parser