gray-matter-rs

Latest Version Documentation

A rust implementation of gray-matter.

Support Parsers * toml * yaml * json * ... (more custom parsers)

Usage

Add Dependency

Append this crate to the Cargo.toml: ```toml [dependencies]

other dependencies...

gray_matter = "0.1" ```

Parse

```rust use graymatter::matter::Matter; use graymatter::engine::yaml::YAML; use gray_matter::entity::ParsedEntityStruct; use serde::Deserialize;

fn main() { // select one parser engine, such as YAML let matter: Matter = Matter::new(); let input = r#"--- title: gray-matter-rs tags: - gray-matter

- rust

Some excerpt

Other stuff"#; let result = matter.matter(input); println!("content: {:?}", result.content); println!("excerpt: {:?}", result.excerpt); println!("title: {:?}", result.data["title"].asstring().unwrap()); println!("tags[0]: {:?}", result.data["tags"][0].asstring().unwrap()); println!("tags[1]: {:?}", result.data["tags"][1].asstring().unwrap()); // content: "Some excerpt\n---\nOther stuff" // excerpt: "Some excerpt" // title: "gray-matter-rs" // tags[0]: "gray-matter" // tags[1]: "rust" #[derive(Deserialize, Debug)] struct FrontMatter { title: String, tags: Vec } let frontmatter: FrontMatter = result.data.deserialize().unwrap(); println!("{:?}", frontmatter); // FrontMatter { title: "gray-matter-rs", tags: ["gray-matter", "rust"] } let resultwithstruct: ParsedEntityStruct = matter.matterstruct(input); println!("{:?}", resultwithstruct.data) // FrontMatter { title: "gray-matter-rs", tags: ["gray-matter", "rust"] } } ```

Custom Delimiters

```rust use graymatter::matter::Matter; use graymatter::engine::yaml::YAML; use gray_matter::entity::ParsedEntityStruct; use serde::Deserialize;

fn main() { let mut matter: Matter = Matter::new(); matter.delimiter = "~~~"; matter.excerptseparator = ""; #[derive(Deserialize, Debug)] struct FrontMatter { abc: String, } let result: ParsedEntityStruct = matter.matterstruct( "~~~\nabc: xyz\n~~~\nfoo\nbar\nbaz\n\ncontent".to_string(), ); } ```

Contribution

If you need more parser engines, feel free to create a PR to help me complete this crate.