lenso 0.3.18

Public facade for authoring and hosting Lenso backend modules.
Documentation

Lenso

lenso is the public Rust facade for Lenso module-authoring and host boot contracts.

Install it from crates.io:

cargo add lenso@0.3.18

The default facade exposes serializable module manifest declarations:

  • module manifests and manifest lints;
  • schema-admin and declarative admin action declarations;
  • HTTP route metadata;
  • runtime function declarations;
  • event handler declarations;
  • lifecycle declarations;
  • Runtime Console surface declarations;
  • story display metadata.

Enable the host feature for the narrow host boot facade:

lenso = { version = "0.3.18", features = ["host"] }

Application SQL, repositories, auth/session policy, CRUD shape, and Runtime Console UI stay in the host application or module code.

Example

use lenso::{
    AdminSchema, EntitySchema, FieldSchema, FieldType, ModuleManifest, ModuleSource,
    RuntimeFunctionDeclaration, RuntimeSurface, lint_module_manifest,
};

let manifest = ModuleManifest::builder("example")
    .capabilities(vec!["example.records.read".to_owned()])
    .admin(AdminSchema {
        entities: vec![EntitySchema {
            name: "records".to_owned(),
            label: "Records".to_owned(),
            fields: vec![FieldSchema {
                name: "id".to_owned(),
                label: "ID".to_owned(),
                field_type: FieldType::String,
                nullable: false,
            }],
            read_capability: "example.records.read".to_owned(),
        }],
    })
    .runtime(RuntimeSurface {
        functions: vec![RuntimeFunctionDeclaration {
            name: "example.refresh.v1".to_owned(),
            version: 1,
            queue: "example".to_owned(),
            input_schema: Some("example.refresh.v1".to_owned()),
            retry_policy: None,
            operation: None,
        }],
        schedules: vec![],
    })
    .build();

let lints = lint_module_manifest(ModuleSource::Remote, &manifest);
assert!(
    lints
        .iter()
        .all(|lint| !matches!(lint.severity, lenso::ModuleManifestLintSeverity::Error))
);