mirror of
https://github.com/tweag/nickel.git
synced 2024-10-06 16:18:08 +03:00
Add term::make::static_access
(#1438)
* Add `term::make::static_access` Add a helper function to the `term::make` module to construct chains of static record accesses. * Provide a variant accepting an arbitrary `RichTerm` as the record * Remove `term::make::static_access_`
This commit is contained in:
parent
7a01d60270
commit
63bf9bb72e
@ -1962,6 +1962,20 @@ pub mod make {
|
||||
pub fn integer(n: impl Into<i64>) -> RichTerm {
|
||||
Term::Num(Number::from(n.into())).into()
|
||||
}
|
||||
|
||||
pub fn static_access<I, S, T>(record: T, fields: I) -> RichTerm
|
||||
where
|
||||
I: IntoIterator<Item = S>,
|
||||
I::IntoIter: DoubleEndedIterator,
|
||||
S: Into<Ident>,
|
||||
T: Into<RichTerm>,
|
||||
{
|
||||
let mut term = record.into();
|
||||
for f in fields.into_iter() {
|
||||
term = make::op1(UnaryOp::StaticAccess(f.into()), term);
|
||||
}
|
||||
term
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
@ -1984,4 +1998,19 @@ mod tests {
|
||||
let res = TypeAnnotation::combine(outer, inner);
|
||||
assert_ne!(res.types, None);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn make_static_access() {
|
||||
let t = make::op1(
|
||||
UnaryOp::StaticAccess("record".into()),
|
||||
make::op1(
|
||||
UnaryOp::StaticAccess("records".into()),
|
||||
make::var("predicates"),
|
||||
),
|
||||
);
|
||||
assert_eq!(
|
||||
make::static_access(make::var("predicates"), ["records", "record"]),
|
||||
t
|
||||
);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user