ontoref-code/examples/catalog-extension/01-rust
2026-07-10 01:44:59 +01:00
..
greet_actor.ncl chore: clean up for constellation migration 2026-07-10 01:44:59 +01:00
greet_actor.rs chore: clean up for constellation migration 2026-07-10 01:44:59 +01:00
README.md chore: clean up for constellation migration 2026-07-10 01:44:59 +01:00

Path A — kind = 'Rust

Default path. The op is compiled into the daemon binary via inventory::collect! at link time. Full Rust type safety; replay- deterministic by construction; zero runtime overhead.

Files

File Purpose
greet_actor.ncl Catalog declaration — typechecks against schema-future.ncl
greet_actor.rs Handler — copies to crates/ontoref-ops/src/ops/greet_actor.rs

How to integrate into ontoref-el-proyecto

  1. Copy the catalog declaration:

    cp examples/catalog-extension/01-rust/greet_actor.ncl \
       .ontoref/catalog/operations/greet_actor.ncl
    

    (Remove the kind = 'Rust line if migration 0025 is not yet applied — the current schema doesn't accept the field but defaults the behaviour to Rust.)

  2. Copy the Rust handler:

    cp examples/catalog-extension/01-rust/greet_actor.rs \
       crates/ontoref-ops/src/ops/greet_actor.rs
    echo 'pub mod greet_actor;' >> crates/ontoref-ops/src/ops/mod.rs
    
  3. Author the matching validators (out of scope of this example): actor_exists, tone_in_allowed_set, greeting_recorded — each as a #[onto_validator] function. See crates/ontoref-ops/src/precondition/ for the pattern.

  4. Build and test:

    cargo build -p ontoref-daemon
    cargo test -p ontoref-ops greet_actor
    
  5. Dispatch:

    curl -X POST http://127.0.0.1:7891/ops/greet_actor \
      -H "Authorization: Bearer $ONTOREF_TOKEN" \
      -d '{"actor_id":"jpl","tone":"dao"}'
    

Key properties

  • Witness coverage: the daemon signs the canonical serialisation of the state delta (the new current_state value in the actor-greeting FSM dimension). The signature attests the in-process computation.
  • No evaluate_ondaod required in pre-validators: Rust ops can invoke dispatch::call("evaluate_ondaod", …) inline when needed. The schema-level Hard constraint non-rust-kinds-require-ondaod-pre only applies to kind != 'Rust.
  • Backward-compatible: omitting kind in the declaration is equivalent to declaring 'Rust (default).