Parsing metadata
This commit is contained in:
parent
34e81035d0
commit
4a5e2cd99b
4 changed files with 54 additions and 13 deletions
29
Cargo.lock
generated
29
Cargo.lock
generated
|
@ -1034,6 +1034,18 @@ dependencies = [
|
|||
"web-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "gray_matter"
|
||||
version = "0.2.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1cf2fb99fac0b821a4e61c61abff076324bb0e5c3b4a83815bbc3518a38971ad"
|
||||
dependencies = [
|
||||
"serde",
|
||||
"serde_json",
|
||||
"toml",
|
||||
"yaml-rust",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "h2"
|
||||
version = "0.3.22"
|
||||
|
@ -1571,6 +1583,12 @@ dependencies = [
|
|||
"serde_test",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "linked-hash-map"
|
||||
version = "0.5.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
|
||||
|
||||
[[package]]
|
||||
name = "linux-raw-sys"
|
||||
version = "0.4.11"
|
||||
|
@ -1822,6 +1840,7 @@ dependencies = [
|
|||
"futures",
|
||||
"glob",
|
||||
"gloo-net 0.4.0",
|
||||
"gray_matter",
|
||||
"leptos",
|
||||
"leptos_actix",
|
||||
"leptos_icons",
|
||||
|
@ -1829,6 +1848,7 @@ dependencies = [
|
|||
"leptos_router",
|
||||
"log",
|
||||
"pulldown-cmark",
|
||||
"serde",
|
||||
"simple_logger",
|
||||
"wasm-bindgen",
|
||||
]
|
||||
|
@ -3018,6 +3038,15 @@ version = "0.8.7"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9828b178da53440fa9c766a3d2f73f7cf5d0ac1fe3980c1e5018d899fd19e07b"
|
||||
|
||||
[[package]]
|
||||
name = "yaml-rust"
|
||||
version = "0.4.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85"
|
||||
dependencies = [
|
||||
"linked-hash-map",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "yansi"
|
||||
version = "1.0.0-rc.1"
|
||||
|
|
|
@ -36,8 +36,10 @@ actix-files = { version = "0.6", optional = true }
|
|||
actix-web = { version = "4", features = ["macros"], optional = true }
|
||||
futures = { version = "0.3", optional = true }
|
||||
simple_logger = { version = "4.2", optional = true }
|
||||
pulldown-cmark = { version = "0.9", optional = true }
|
||||
glob = { version = "0.3", optional = true }
|
||||
serde = { version = "1.0", optional = true }
|
||||
pulldown-cmark = { version = "0.9", optional = true } # markdown parser
|
||||
gray_matter = { version = "0.2", optional = true } # frontmatter parser
|
||||
|
||||
[features]
|
||||
default = ["csr"]
|
||||
|
@ -66,8 +68,10 @@ ssr = [
|
|||
"dep:actix-files",
|
||||
"dep:futures",
|
||||
"dep:simple_logger",
|
||||
"dep:pulldown-cmark",
|
||||
"dep:glob",
|
||||
"dep:serde",
|
||||
"dep:pulldown-cmark",
|
||||
"dep:gray_matter",
|
||||
]
|
||||
|
||||
[package.metadata.cargo-all-features]
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
use serde::{Deserialize, Serialize};
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug, Clone)]
|
||||
pub struct PostMetadata {
|
||||
image_path: Option<String>,
|
||||
title: String,
|
||||
|
@ -6,6 +9,7 @@ pub struct PostMetadata {
|
|||
project_link: Option<String>,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug, Clone)]
|
||||
pub struct Post {
|
||||
metadata: PostMetadata,
|
||||
content: String,
|
||||
|
@ -15,22 +19,23 @@ cfg_if::cfg_if! {
|
|||
if #[cfg(feature = "ssr")] {
|
||||
impl From<String> for Post {
|
||||
fn from(content: String) -> Self {
|
||||
use gray_matter::{Matter, engine::YAML};
|
||||
let matter = Matter::<YAML>::new();
|
||||
|
||||
let post_data = matter
|
||||
.parse_with_struct::<PostMetadata>(&content)
|
||||
.expect("Unable to parse md frontmatter");
|
||||
|
||||
let metadata = post_data.data;
|
||||
let content = post_data.content;
|
||||
|
||||
use pulldown_cmark::{Parser, Options, html};
|
||||
|
||||
let parser = Parser::new_ext(&content, Options::all());
|
||||
|
||||
let mut html_output = String::new();
|
||||
html::push_html(&mut html_output, parser);
|
||||
println!("\nHTML output:\n{}\n", &html_output);
|
||||
|
||||
Self {
|
||||
metadata: PostMetadata {
|
||||
image_path: None,
|
||||
title: String::from(""),
|
||||
date: String::from(""),
|
||||
description: String::from(""),
|
||||
project_link: None,
|
||||
},
|
||||
metadata,
|
||||
content: html_output,
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,7 +11,10 @@ cfg_if! {
|
|||
|
||||
#[actix_web::main]
|
||||
async fn main() -> std::io::Result<()> {
|
||||
let _ = app::models::Post::get_all();
|
||||
let posts = app::models::Post::get_all();
|
||||
for post in posts.unwrap() {
|
||||
println!("{:?}", post);
|
||||
}
|
||||
|
||||
// Setting this to None means we'll be using cargo-leptos and its env vars.
|
||||
let conf = get_configuration(None).await.unwrap();
|
||||
|
|
Loading…
Reference in a new issue