Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/estebanborai/yaml-front-matter
Parses a valid YAML string into a struct which implements the DeserializeOwned trait from serde
https://github.com/estebanborai/yaml-front-matter
front-matter markdown parser rust yaml
Last synced: about 1 month ago
JSON representation
Parses a valid YAML string into a struct which implements the DeserializeOwned trait from serde
- Host: GitHub
- URL: https://github.com/estebanborai/yaml-front-matter
- Owner: EstebanBorai
- License: apache-2.0
- Created: 2021-09-23T02:27:24.000Z (about 3 years ago)
- Default Branch: main
- Last Pushed: 2021-09-26T14:35:39.000Z (about 3 years ago)
- Last Synced: 2024-10-02T09:22:21.456Z (about 2 months ago)
- Topics: front-matter, markdown, parser, rust, yaml
- Language: Rust
- Homepage: https://crates.io/crates/yaml-front-matter
- Size: 21.5 KB
- Stars: 14
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG
- License: LICENSE-APACHE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
yaml-front-matter
YAML Front Matter (YFM) parser for Markdown files
[![Crates.io](https://img.shields.io/crates/v/yaml-front-matter.svg)](https://crates.io/crates/yaml-front-matter)
[![Documentation](https://docs.rs/yaml-front-matter/badge.svg)](https://docs.rs/yaml-front-matter)
![Build](https://github.com/EstebanBorai/yaml-front-matter/workflows/build/badge.svg)
![Clippy](https://github.com/EstebanBorai/yaml-front-matter/workflows/clippy/badge.svg)
![Fmt](https://github.com/EstebanBorai/yaml-front-matter/workflows/fmt/badge.svg)
![Release](https://github.com/EstebanBorai/yaml-front-matter/workflows/release/badge.svg)
![Tests](https://github.com/EstebanBorai/yaml-front-matter/workflows/test/badge.svg)# YAML Front Matter (YFM) Parser
**yaml-front-matter** parses a valid YAML string into a `struct` which
implements the `DeserializeOwned` trait from serde.Consider the following YAML content on the top of your markdown file:
```yml
---
title: 'Parsing a Markdown file metadata into a struct'
description: 'This tutorial walks you through the practice of parsing markdown files for metadata'
tags: ['markdown', 'rust', 'files', 'parsing', 'metadata']
similar_posts:
- 'Rendering markdown'
- 'Using Rust to render markdown'
date: '2021-09-13T03:48:00'
favorite_numbers:
- 3.14
- 1970
- 12345
---
```This crate takes care of extracting this header from your markdown file and
parse extracted data using `serde` and `serde_yaml`.## Example
```rust
use serde::Deserialize;
use yaml_front_matter::YamlFrontMatter;const SIMPLE_MARKDOWN_YFM: &str = r#"
---
title: 'Parsing a Markdown file metadata into a struct'
description: 'This tutorial walks you through the practice of parsing markdown files for metadata'
tags: ['markdown', 'rust', 'files', 'parsing', 'metadata']
similar_posts:
- 'Rendering markdown'
- 'Using Rust to render markdown'
date: '2021-09-13T03:48:00'
favorite_numbers:
- 3.14
- 1970
- 12345
---# Parsing a **Markdown** file metadata into a `struct`
> This tutorial walks you through the practice of parsing markdown files for metadata
"#;#[derive(Deserialize)]
struct Metadata {
title: String,
description: String,
tags: Vec,
similar_posts: Vec,
date: String,
favorite_numbers: Vec,
}let result = YamlFrontMatter::parse::(&SIMPLE_MARKDOWN_YFM).unwrap();
let Metadata {
title,
description,
tags,
similar_posts,
date,
favorite_numbers,
} = result;assert_eq!(title, "Parsing a Markdown file metadata into a struct");
assert_eq!(
description,
"This tutorial walks you through the practice of parsing markdown files for metadata"
);
assert_eq!(
tags,
vec!["markdown", "rust", "files", "parsing", "metadata"]
);
assert_eq!(
similar_posts,
vec!["Rendering markdown", "Using Rust to render markdown"]
);
assert_eq!(date, "2021-09-13T03:48:00");
assert_eq!(favorite_numbers, vec![3.14, 1970., 12345.]);
```