pub fn parse<'r, 'e: 'r>(
reader: &'r mut SourceReader<'e>,
) -> Result<Node<'e>, Error>Expand description
Parse a single Node from a SourceReader, consuming that form.
§Examples
#[cfg(feature = "unstable")]
{
use clojure_reader::parse::{Node, NodeKind::*, SourceReader, parse};
let source = r#"
(->> txs
(keep :refund-amt)
(reduce +))
; total refund amount
"#;
let mut reader = SourceReader::new(source);
let Node { kind: node, .. } = parse(&mut reader).expect("failed to parse");
let List(nodes, _) = node else { panic!("unexpected") };
// Destruct main list
let nodes: Vec<_> = nodes.into_iter().map(|n| n.kind).collect();
let [Symbol("->>"), Symbol("txs"), List(keep, _), List(reduce, _)] = nodes.as_slice() else {
panic!("unexpected");
};
// Destruct the list calling `keep`
let keep: Vec<_> = keep.into_iter().map(|n| &n.kind).collect();
let [Symbol("keep"), Key("refund-amt")] = keep.as_slice() else {
panic!("unexpected");
};
// Destruct the list calling `reduce`
let reduce: Vec<_> = reduce.into_iter().map(|n| &n.kind).collect();
let [Symbol("reduce"), Symbol("+")] = reduce.as_slice() else {
panic!("unexpected");
};
assert_eq!(reader.remaining(), "\n ; total refund amount\n");
}§Errors
See crate::error::Error.