14 releases (7 breaking)
new 0.8.0 | Sep 26, 2023 |
---|---|
0.6.0 | Aug 7, 2023 |
0.5.1 | Jul 24, 2023 |
#3 in #cooking-recipes
241 downloads per month
Used in 5 crates
320KB
7.5K
SLoC
cooklang-rs
Cooklang parser in rust with opt-in extensions.
All regular cooklang files parse as the same recipe, the extensions are a superset of the original cooklang format. Also, the extensions can be turned off, so the parser can be used for regular cooklang if you don't like them.
You can see a detailed list of all extensions explained here.
The parser also includes:
- Rich error report with annotated code spans. (like this one)
- Unit conversion.
- Recipe scaling.
- A parser for cooklang aisle configuration file.
lib.rs
:
A cooklang parser with opt-in extensions.
The extensions create a superset of the original cooklang language and can be turned off. To see a detailed list go to extensions.
Also includes:
- Rich error report with annotated code spans.
- Unit conversion.
- Recipe scaling.
- A parser for cooklang aisle configuration file.
Basic usage
If you just want to parse a single cooklang
file, see parse
.
As soon as you are going to parse more than one, or want to change the configuration of the parser, construct a parser instance yourself.
To construct a parser use CooklangParser::new
or
CooklangParser::default
if you want to configure the parser. You can
configure which Extensions
are enabled and the Converter
used to
convert and check units.
// Create a parser
// (this is the default configuration)
let parser = CooklangParser::new(Extensions::all(), Converter::default());
Then use the parser:
let src = "This is an @example.";
let name = "Example Recipe";
let (recipe, _warnings) = parser.parse(src, name).into_result()?;
assert_eq!(recipe.name, name);
assert_eq!(recipe.ingredients.len(), 1);
assert_eq!(recipe.ingredients[0].name, "example");
Recipes can be scaled and converted. But the following applies:
-
Parsing returns a
ScalableRecipe
. -
Only
ScalableRecipe
can bescale
d ordefault_scale
d only once to obtain aScaledRecipe
. -
Only
ScaledRecipe
can beconvert
ed. This lib has 2 features, both enabled by default: -
bundled_units
. Includes a units file with the most common units for recipes in English. These units are available to load when you want without the need to read a file. The defaultConverter
use them if this feature is enabled. This is the bundled file -
aisle
. Enables theaisle
module.
Dependencies
~8–11MB
~268K SLoC