byteor_runtime/
registry.rs1use byteor_app_kit::capabilities::{
2 runtime_capability_document, stable_stage_catalog_entry, ExecutionTarget, PolicyClassId,
3 ReplaySupport, RuntimeCapabilityDocument, RuntimeEnvironment, StageCatalogEntry,
4};
5
6pub fn default_stage_registry() -> byteor_pipeline_exec::SliceStageRegistry {
8 byteor_pipeline_exec::SliceStageRegistry::new(DEFAULT_STAGES)
9}
10
11pub fn default_stage_catalog_entries() -> Vec<StageCatalogEntry> {
13 vec![stable_stage_catalog_entry(
14 "identity",
15 "Built-in identity stage",
16 vec![ExecutionTarget::SingleRing, ExecutionTarget::LaneGraph],
17 PolicyClassId::PureTransform,
18 ReplaySupport::Allowed,
19 vec![
20 RuntimeEnvironment::Dev,
21 RuntimeEnvironment::Staging,
22 RuntimeEnvironment::Prod,
23 ],
24 Vec::new(),
25 )]
26}
27
28pub fn default_runtime_capability_document(product: &str) -> RuntimeCapabilityDocument {
30 runtime_capability_document(product, default_stage_catalog_entries())
31}
32
33pub trait RuntimeApp {
38 type RunExt: Default;
40
41 fn build_stage_resolver(&self, _ext: &Self::RunExt) -> Box<dyn crate::stage::StageResolver>;
43}
44
45pub struct DefaultApp;
47
48impl RuntimeApp for DefaultApp {
49 type RunExt = ();
50
51 fn build_stage_resolver(&self, _ext: &Self::RunExt) -> Box<dyn crate::stage::StageResolver> {
52 Box::new(default_stage_registry())
53 }
54}
55
56fn identity(input: &[u8], output: &mut [u8]) -> usize {
57 let n = input.len().min(output.len());
58 output[..n].copy_from_slice(&input[..n]);
59 n
60}
61
62fn identity_factory() -> byteor_pipeline_exec::ResolvedStage {
63 byteor_pipeline_exec::ResolvedStage::MapOk(identity)
64}
65
66static DEFAULT_STAGES: &[byteor_pipeline_exec::StageEntry] = &[byteor_pipeline_exec::StageEntry {
67 name: "identity",
68 factory: identity_factory,
69}];