pub struct ListShape { /* private fields */ }Expand description
A shape that matches a list positionally, with an optional rest shape.
The leading items shapes must match the list elements in order. Without a
rest shape the list length must match exactly (a tuple); with one, every
trailing element must match the rest shape (a variadic list).
§Examples
use sim_kernel::{Cx, DefaultFactory, Expr, NoopEvalPolicy};
use sim_shape::{ExprKind, ExprKindShape, ListShape, Shape};
let mut cx = Cx::new(Arc::new(NoopEvalPolicy), Arc::new(DefaultFactory));
let shape = ListShape::new(vec![Arc::new(ExprKindShape::new(ExprKind::String))]);
let expr = Expr::List(vec![Expr::String("hi".to_owned())]);
assert!(shape.check_expr(&mut cx, &expr).unwrap().accepted);
// an empty list rejects: the single positional item shape is unmatched.
assert!(!shape.check_expr(&mut cx, &Expr::List(vec![])).unwrap().accepted);Implementations§
Source§impl ListShape
impl ListShape
Sourcepub fn new(items: Vec<Arc<dyn Shape>>) -> Self
pub fn new(items: Vec<Arc<dyn Shape>>) -> Self
Build a fixed-length list shape over the given positional item shapes.
Sourcepub fn tuple(items: Vec<Arc<dyn Shape>>) -> Self
pub fn tuple(items: Vec<Arc<dyn Shape>>) -> Self
Build a fixed-length tuple shape; an alias for ListShape::new.
Sourcepub fn with_rest(items: Vec<Arc<dyn Shape>>, rest: Arc<dyn Shape>) -> Self
pub fn with_rest(items: Vec<Arc<dyn Shape>>, rest: Arc<dyn Shape>) -> Self
Build a list shape with leading items and a rest shape for the tail.
Trait Implementations§
Source§impl Shape for ListShape
impl Shape for ListShape
Source§fn is_subshape_of(
&self,
cx: &mut Cx,
parent: &dyn Shape,
) -> Result<Option<bool>>
fn is_subshape_of( &self, cx: &mut Cx, parent: &dyn Shape, ) -> Result<Option<bool>>
Return a concrete implication answer when this shape owns the semantics. Read more
Source§fn check_value(&self, cx: &mut Cx, value: Value) -> Result<ShapeMatch>
fn check_value(&self, cx: &mut Cx, value: Value) -> Result<ShapeMatch>
Check a
Value against this shape, yielding a ShapeMatch.Source§fn check_expr(&self, cx: &mut Cx, expr: &Expr) -> Result<ShapeMatch>
fn check_expr(&self, cx: &mut Cx, expr: &Expr) -> Result<ShapeMatch>
Check an
Expr against this shape, yielding a ShapeMatch.Source§fn describe(&self, cx: &mut Cx) -> Result<ShapeDoc>
fn describe(&self, cx: &mut Cx) -> Result<ShapeDoc>
Produce the human-facing
ShapeDoc for this shape.Source§fn id(&self) -> Option<ShapeId>
fn id(&self) -> Option<ShapeId>
Stable
ShapeId when this shape has runtime identity, else None.Source§fn parents(&self, _cx: &mut Cx) -> Result<Vec<Value>, Error>
fn parents(&self, _cx: &mut Cx) -> Result<Vec<Value>, Error>
Parent shapes for the subshape walk; empty by default.
Source§fn is_effectful(&self) -> bool
fn is_effectful(&self) -> bool
Whether matching this shape may run effects;
false by default.Auto Trait Implementations§
impl !RefUnwindSafe for ListShape
impl !UnwindSafe for ListShape
impl Freeze for ListShape
impl Send for ListShape
impl Sync for ListShape
impl Unpin for ListShape
impl UnsafeUnpin for ListShape
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> Callable for Twhere
T: Shape,
impl<T> Callable for Twhere
T: Shape,
Source§fn call(&self, cx: &mut Cx, args: Args) -> Result<Value, Error>
fn call(&self, cx: &mut Cx, args: Args) -> Result<Value, Error>
Invoke the callable with already-evaluated, checked
Args.Source§fn call_exprs(&self, cx: &mut Cx, args: RawArgs) -> Result<Value, Error>
fn call_exprs(&self, cx: &mut Cx, args: RawArgs) -> Result<Value, Error>
Invoke the callable on raw, unevaluated argument expressions. Read more
Source§impl<T> Object for T
impl<T> Object for T
Source§fn display(&self, cx: &mut Cx) -> Result<String, Error>
fn display(&self, cx: &mut Cx) -> Result<String, Error>
Render the object as a human-readable display string.
Source§fn header(&self) -> &ObjectHeader
fn header(&self) -> &ObjectHeader
Identity and trust header for the object; defaults to the shared
anonymous header.
Source§fn op(&self, _key: &OpKey) -> Option<&dyn Op>
fn op(&self, _key: &OpKey) -> Option<&dyn Op>
Resolve the operation registered under
key, if any.Source§impl<T> ObjectCompat for T
impl<T> ObjectCompat for T
Source§fn class(&self, cx: &mut Cx) -> Result<Value, Error>
fn class(&self, cx: &mut Cx) -> Result<Value, Error>
Class object this value belongs to; defaults to nil.
Source§fn as_table(&self, cx: &mut Cx) -> Result<Value, Error>
fn as_table(&self, cx: &mut Cx) -> Result<Value, Error>
Project the object into a table value; the default exposes its display.
Source§fn as_callable(&self) -> Option<&dyn Callable>
fn as_callable(&self) -> Option<&dyn Callable>
Callable view, if the object can be invoked.
Source§fn as_object_encoder(&self) -> Option<&dyn ObjectEncode>
fn as_object_encoder(&self) -> Option<&dyn ObjectEncode>
Object-encoder view, if the object encodes other objects.
Source§fn as_read_constructor(&self) -> Option<&dyn ReadConstructor>
fn as_read_constructor(&self) -> Option<&dyn ReadConstructor>
Read-constructor view, if the object decodes data forms.
Source§fn as_number_domain(&self) -> Option<&(dyn NumberDomain + 'static)>
fn as_number_domain(&self) -> Option<&(dyn NumberDomain + 'static)>
Number-domain view, if the object is a number domain.
Source§fn as_number_value(&self) -> Option<&dyn NumberValue>
fn as_number_value(&self) -> Option<&dyn NumberValue>
Number-value view, if the object is a domain number.
Source§fn as_eval_fabric(&self) -> Option<&dyn EvalFabric>
fn as_eval_fabric(&self) -> Option<&dyn EvalFabric>
Eval-fabric view, if the object is a distributed eval surface.
Source§fn as_sequence(&self) -> Option<&dyn Sequence>
fn as_sequence(&self) -> Option<&dyn Sequence>
Sequence view, if the object is a sequence.
Source§fn as_list(&self) -> Option<&(dyn ListValue + 'static)>
fn as_list(&self) -> Option<&(dyn ListValue + 'static)>
List view, if the object is a list value.
Source§fn as_table_impl(&self) -> Option<&(dyn Table + 'static)>
fn as_table_impl(&self) -> Option<&(dyn Table + 'static)>
Table-implementation view, if the object is a table.
Source§fn as_dir(&self) -> Option<&(dyn Dir + 'static)>
fn as_dir(&self) -> Option<&(dyn Dir + 'static)>
Directory view, if the object is a directory.
Source§fn as_expr(&self, cx: &mut Cx) -> Result<Expr, Error>
fn as_expr(&self, cx: &mut Cx) -> Result<Expr, Error>
Expression form of the object; defaults to an opaque extension node.