Update for the latest nom and make serde an optional dep.

This commit is contained in:
Tom Alexander 2020-12-29 18:07:49 -05:00
parent aa3ed99fca
commit a9a83d1b4a
Signed by: talexander
GPG Key ID: D3A179C9A53C0EDE
3 changed files with 27 additions and 12 deletions

View File

@ -6,7 +6,7 @@ edition = "2018"
[features] [features]
default = [] default = []
json-integration = [] json-integration = ["serde", "serde_json"]
[lib] [lib]
name = "duster" name = "duster"
@ -19,5 +19,5 @@ required-features = ["json-integration"]
[dependencies] [dependencies]
nom = { git = "https://github.com/tomalexander/nom.git", branch = "take_until_parser_matches" } nom = { git = "https://github.com/tomalexander/nom.git", branch = "take_until_parser_matches" }
serde = "1.0.106" serde = { version = "1.0.106", optional = true }
serde_json = "1.0.51" serde_json = { version = "1.0.51", optional = true }

6
src/integrations/json.rs Normal file
View File

@ -0,0 +1,6 @@
//! This file contains an integration for duster that implements
//! support for using serde_json values for the render context. This
//! is in its own separate file to avoid requiring serde as a
//! dependency since ContextElement can be implemented for any
//! type. Disable the json-integration feature to avoid compiling this
//! file and adding the serde and serde_json dependencies.

View File

@ -807,7 +807,10 @@ mod tests {
assert_eq!(super::special("{~rb}"), Ok(("", Special::RightCurlyBrace))); assert_eq!(super::special("{~rb}"), Ok(("", Special::RightCurlyBrace)));
assert_eq!( assert_eq!(
super::special("{~zzz}"), super::special("{~zzz}"),
Err(Error(("zzz}", ErrorKind::Tag))) Err(Error(nom::error::Error {
input: "zzz}",
code: ErrorKind::Tag
}))
); );
} }
@ -824,10 +827,10 @@ mod tests {
); );
assert_eq!( assert_eq!(
super::special("{! this is a comment without a close"), super::special("{! this is a comment without a close"),
Err(Error(( Err(Error(nom::error::Error {
"{! this is a comment without a close", input: "{! this is a comment without a close",
ErrorKind::Tag code: ErrorKind::Tag
))) }))
); );
} }
@ -861,7 +864,10 @@ mod tests {
); );
assert_eq!( assert_eq!(
super::span("{~lb}"), super::span("{~lb}"),
Err(Error(("{~lb}", ErrorKind::Verify))) Err(Error(nom::error::Error {
input: "{~lb}",
code: ErrorKind::Verify
}))
); );
assert_eq!( assert_eq!(
super::body("this is \t \n\n \t \n \t multiline text\n {foo}"), super::body("this is \t \n\n \t \n \t multiline text\n {foo}"),
@ -911,7 +917,10 @@ mod tests {
fn test_section_mismatched_paths() { fn test_section_mismatched_paths() {
assert_eq!( assert_eq!(
super::dust_tag("{#foo.bar}{/baz}"), super::dust_tag("{#foo.bar}{/baz}"),
Err(Error(("{#foo.bar}{/baz}", ErrorKind::Tag))) Err(Error(nom::error::Error {
input: "{#foo.bar}{/baz}",
code: ErrorKind::Tag
}))
); );
} }
@ -1539,7 +1548,7 @@ mod tests {
{.} {.}
{/names}" {/names}"
), ),
Ok::<_, nom::Err<(&str, ErrorKind)>>(( Ok::<_, nom::Err<nom::error::Error<&str>>>((
"", "",
Template { Template {
contents: Body { contents: Body {
@ -1613,7 +1622,7 @@ mod tests {
super::template( super::template(
r#"{#level3.level4}{>partialtwo v1="b" v2="b" v3="b" v4="b" v5="b" /}{/level3.level4}"# r#"{#level3.level4}{>partialtwo v1="b" v2="b" v3="b" v4="b" v5="b" /}{/level3.level4}"#
), ),
Ok::<_, nom::Err<(&str, ErrorKind)>>(( Ok::<_, nom::Err<nom::error::Error<&str>>>((
"", "",
Template { Template {
contents: Body { contents: Body {