Skip to main content

Crate lightshuttle_export

Crate lightshuttle_export 

Source
Expand description

Manifest to deployment artifact transpilation for LightShuttle.

§Position in the crate graph

lightshuttle-export sits above lightshuttle-manifest (the parsed YAML representation) and lightshuttle-spec (the canonical resource specification). It depends on both; the CLI crate depends on this one to write the produced files to disk.

§Pipeline: manifest -> IR -> artifacts

The export pipeline follows a compiler shape:

  1. Lowering (lower): a lightshuttle_manifest::Manifest is lowered into a target-agnostic ExportModel (the IR). Every resource is resolved through lightshuttle-spec so the model inherits the same image, port, environment, and healthcheck defaults that the runtime applies - no drift between lightshuttle up and lightshuttle export.
  2. Emission (Emitter): a target-specific emitter consumes the ExportModel and produces ExportArtifacts, a list of named files whose textual contents are ready to write. Three emitters ship out of the box: ComposeEmitter, KubernetesEmitter, and HelmEmitter.
  3. Resolution (resolve): pure helpers that turn the optional export: manifest section into concrete per-target values (namespace, replica count, image pull policy, chart name). All emitters share this module so defaults are defined and tested in one place.

§No daemon dependency

This crate carries no container daemon dependency. It only reads the manifest and the resolved specification, so it transpiles identically on a developer machine or in CI without Docker.

§Quick start

use lightshuttle_export::{lower, ComposeEmitter, Emitter};
use lightshuttle_manifest::Manifest;

// Load a manifest from disk (I/O, so no_run).
let manifest: Manifest = todo!("parse from YAML");

// Lower the manifest into the neutral IR.
let model = lower(&manifest)?;

// Emit Docker Compose artifacts.
let emitter = ComposeEmitter;
let artifacts = emitter.emit(&model)?;

for file in &artifacts.files {
    println!("{}: {} bytes", file.path.display(), file.contents.len());
}

Modules§

resolve
Pure resolution of per-target defaults and overrides.

Structs§

ComposeEmitter
Emits a single docker-compose.yml from the export model.
ExportArtifacts
A set of named files produced by an emitter, ready to be written to disk by the CLI layer.
ExportFile
A single emitted file: a relative path and its textual contents.
ExportModel
Target-agnostic model of a stack ready to be emitted.
ExportProject
Project metadata relevant to an export.
ExportService
One service in the export model: a resolved container specification plus the resources it depends on.
HelmEmitter
Emits a Helm chart from the export model.
KubernetesEmitter
Emits plain Kubernetes manifests from the export model.

Enums§

ExportError
Errors raised while lowering a manifest or emitting artifacts.
Target
Supported export targets.

Traits§

Emitter
Transpiles an ExportModel into the files of a single deployment target.

Functions§

lower
Lowers a lightshuttle_manifest::Manifest into an ExportModel.

Type Aliases§

Result
Shorthand Result type that pins the error to ExportError.