Introducing an RValue enum to handle paths vs literals
This commit is contained in:
		
							parent
							
								
									8641e5a98b
								
							
						
					
					
						commit
						dd8b4ac28c
					
				| @ -113,6 +113,12 @@ enum TemplateElement<'a> { | ||||
|     TETag(DustTag<'a>), | ||||
| } | ||||
| 
 | ||||
| #[derive(Clone, Debug, PartialEq)] | ||||
| enum RValue<'a> { | ||||
|     RVPath(Path<'a>), | ||||
|     RVLiteral(&'a str), | ||||
| } | ||||
| 
 | ||||
| /// Any element significant to dust that isn't plain text
 | ||||
| ///
 | ||||
| /// These elements are always wrapped in curly braces
 | ||||
| @ -168,12 +174,13 @@ fn path(i: &str) -> IResult<&str, Path> { | ||||
| } | ||||
| 
 | ||||
| /// Either a literal or a path to a value
 | ||||
| fn rvalue(i: &str) -> IResult<&str, &str> { | ||||
|     key(i) | ||||
| fn rvalue(i: &str) -> IResult<&str, RValue> { | ||||
|     map(path, RValue::RVPath)(i) | ||||
| } | ||||
| 
 | ||||
| fn key_value_pair(i: &str) -> IResult<&str, (&str, Path)> { | ||||
|     separated_pair(key, tag("="), path)(i) | ||||
| /// Parameters for a partial
 | ||||
| fn key_value_pair(i: &str) -> IResult<&str, (&str, RValue)> { | ||||
|     separated_pair(key, tag("="), rvalue)(i) | ||||
| } | ||||
| 
 | ||||
| /// Display a value from the context
 | ||||
| @ -681,7 +688,13 @@ mod tests { | ||||
|                 )), | ||||
|                 tag("/}"), | ||||
|             )("{>foo bar=baz/}"), | ||||
|             Ok(("", ("foo", Some(vec![("bar", Path { keys: vec!["baz"] })])))) | ||||
|             Ok(( | ||||
|                 "", | ||||
|                 ( | ||||
|                     "foo", | ||||
|                     Some(vec![("bar", RValue::RVPath(Path { keys: vec!["baz"] }))]) | ||||
|                 ) | ||||
|             )) | ||||
|         ); | ||||
|     } | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Tom Alexander
						Tom Alexander