xee_interpreter/function/
inline_function.rs1use xee_schema_type::Xs;
2use xee_xpath_type::ast::SequenceType;
3
4use crate::sequence;
5use crate::span::SourceSpan;
6use crate::xml;
7
8use super::signature::Signature;
9
10#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
11pub struct CastType {
12 pub xs: Xs,
13 pub empty_sequence_allowed: bool,
14}
15
16#[derive(Debug, Clone, PartialEq, Eq)]
17pub struct Name(pub(crate) String);
18
19impl Name {
20 pub fn new(name: String) -> Self {
21 Name(name)
22 }
23}
24
25#[derive(Debug, Clone)]
26pub struct InlineFunction {
27 pub name: String,
28 pub signature: Signature,
29 pub constants: Vec<sequence::Sequence>,
31 pub steps: Vec<xml::Step>,
32 pub cast_types: Vec<CastType>,
33 pub sequence_types: Vec<SequenceType>,
34 pub closure_names: Vec<Name>,
35 pub chunk: Vec<u8>,
37 pub spans: Vec<SourceSpan>,
38}
39
40impl InlineFunction {
41 pub(crate) fn signature(&self) -> &Signature {
42 &self.signature
43 }
44
45 pub(crate) fn arity(&self) -> usize {
46 self.signature.parameter_types().len()
47 }
48
49 pub fn display_representation(&self) -> String {
50 let signature = self.signature.display_representation();
51 format!("function{}", signature)
52 }
53}