Skip to main content

HookedShape

Struct HookedShape 

Source
pub struct HookedShape { /* private fields */ }
Expand description

Shape wrapper that runs neutral match hooks around an inner shape.

HookedShape keeps the kernel Shape trait unchanged. Mark hooks observe, accept hooks can repair rejections, discard hooks can veto acceptances, and annotate hooks can adjust score and diagnostics without changing acceptance.

let shape = HookedShape::new(Arc::new(AnyShape), vec![Arc::new(TraceMarkHook)]);
let matched = shape.check_expr(&mut cx, &Expr::Bool(true)).unwrap();

assert!(matched.accepted);
assert!(matched
    .diagnostics
    .iter()
    .any(|diagnostic| diagnostic.message.starts_with("shape-hook:mark")));

Implementations§

Source§

impl HookedShape

Source

pub fn new(inner: Arc<dyn Shape>, hooks: Vec<Arc<dyn MatchHook>>) -> Self

Wrap an inner shape with an ordered list of match hooks.

Source

pub fn inner(&self) -> &Arc<dyn Shape>

Borrow the wrapped inner shape.

Source

pub fn hooks(&self) -> &[Arc<dyn MatchHook>]

Borrow the hooks run around the inner shape, in registration order.

Trait Implementations§

Source§

impl Shape for HookedShape

Source§

fn parents(&self, cx: &mut Cx) -> Result<Vec<ShapeRef>>

Parent shapes for the subshape walk; empty by default.
Source§

fn is_effectful(&self) -> bool

Whether matching this shape may run effects; false by default.
Source§

fn is_total(&self) -> bool

Whether this shape accepts every input in its domain; false by default.
Source§

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>

Check a Value against this shape, yielding a ShapeMatch.
Source§

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>

Produce the human-facing ShapeDoc for this shape.
Source§

fn id(&self) -> Option<ShapeId>

Stable ShapeId when this shape has runtime identity, else None.
Source§

fn symbol(&self) -> Option<Symbol>

Symbol naming this shape when it has one, else None.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> Callable for T
where T: Shape,

Source§

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>

Invoke the callable on raw, unevaluated argument expressions. Read more
Source§

fn browse_args_shape(&self, _cx: &mut Cx) -> Result<Option<Value>, Error>

Optional shape describing the accepted argument list, for browsing.
Source§

fn browse_result_shape(&self, _cx: &mut Cx) -> Result<Option<Value>, Error>

Optional shape describing the call result, for browsing.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Object for T
where T: Shape + Any,

Source§

fn display(&self, cx: &mut Cx) -> Result<String, Error>

Render the object as a human-readable display string.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Expose the object for Rust downcasting.
Source§

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>

Resolve the operation registered under key, if any.
Source§

fn claims( &self, _cx: &mut Cx, _pattern: &ClaimPattern, _sink: &mut dyn ClaimSink, ) -> Result<(), Error>

Emit the object’s claims matching pattern into sink.
Source§

fn snapshot(&self, _cx: &mut Cx) -> Result<Option<Datum>, Error>

Optional content-addressable snapshot of the object’s state.
Source§

impl<T> ObjectCompat for T
where T: Shape + Any,

Source§

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>

Project the object into a table value; the default exposes its display.
Source§

fn as_shape(&self) -> Option<&dyn Shape>

Shape view, if the object is a shape.
Source§

fn as_callable(&self) -> Option<&dyn Callable>

Callable view, if the object can be invoked.
Source§

fn as_class(&self) -> Option<&dyn Class>

Class view, if the object is a class.
Source§

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>

Read-constructor view, if the object decodes data forms.
Source§

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>

Number-value view, if the object is a domain number.
Source§

fn as_eval_fabric(&self) -> Option<&dyn EvalFabric>

Eval-fabric view, if the object is a distributed eval surface.
Source§

fn as_stream(&self) -> Option<&dyn Stream>

Stream view, if the object is a stream.
Source§

fn as_sequence(&self) -> Option<&dyn Sequence>

Sequence view, if the object is a sequence.
Source§

fn as_thunk(&self) -> Option<&dyn Thunk>

Thunk view, if the object is a deferred computation.
Source§

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)>

Table-implementation view, if the object is a table.
Source§

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>

Expression form of the object; defaults to an opaque extension node.
Source§

fn truth(&self, _cx: &mut Cx) -> Result<bool, Error>

Truthiness of the object; defaults to true.
Source§

fn publish_shape_satisfaction_claims( &self, _cx: &mut Cx, _shape: &Ref, ) -> Result<bool, Error>

Publish claims asserting that the object satisfies shape; returns whether any were published.
Source§

impl<T> RuntimeObject for T
where T: Object + ObjectCompat + Any + Send + Sync,

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.