xrust/transform/
grouping.rs

1//! These functions are for features defined in XPath Functions 1.0 and 2.0.
2
3use crate::item::{Item, Node, Sequence};
4use crate::transform::context::Context;
5use crate::xdmerror::{Error, ErrorKind};
6
7/// XSLT current-group function.
8pub fn current_group<N: Node>(ctxt: &Context<N>) -> Result<Sequence<N>, Error> {
9    Ok(ctxt.current_group.clone())
10}
11
12/// XSLT current-grouping-key function.
13pub fn current_grouping_key<N: Node>(ctxt: &Context<N>) -> Result<Sequence<N>, Error> {
14    ctxt.current_grouping_key.clone().map_or_else(
15        || {
16            Err(Error::new(
17                ErrorKind::TypeError,
18                String::from("no current grouping key"),
19            ))
20        },
21        |k| Ok(vec![Item::Value(k)]),
22    )
23}