Packages
caffeine_lang
5.4.2
6.3.1
6.3.0
6.2.2
6.2.1
6.2.0
6.1.2
6.1.1
6.1.0
6.0.0
5.6.0
5.5.0
5.4.4
5.4.3
5.4.2
5.4.1
5.4.0
5.3.0
5.2.0
5.1.1
5.1.0
5.0.12
5.0.11
5.0.10
5.0.8
5.0.7
5.0.6
5.0.5
5.0.4
5.0.1
5.0.0
4.10.0
4.9.0
4.8.3
4.8.2
4.8.1
4.8.0
4.7.9
4.7.8
4.7.7
4.7.6
4.7.5
4.6.7
4.6.6
4.6.5
4.6.4
4.6.3
4.6.2
4.6.0
4.5.1
4.5.0
4.4.4
4.4.3
4.4.1
4.4.0
4.3.7
4.3.6
3.0.6
3.0.5
3.0.4
3.0.3
3.0.2
3.0.1
3.0.0
2.0.5
2.0.4
2.0.3
2.0.2
2.0.1
2.0.0
1.0.2
1.0.1
0.1.0
0.0.24
0.0.23
0.0.22
0.0.21
0.0.20
0.0.19
0.0.18
0.0.17
0.0.16
0.0.15
0.0.14
0.0.13
0.0.12
0.0.11
0.0.10
0.0.9
0.0.8
0.0.7
0.0.6
0.0.5
0.0.4
0.0.2
0.0.1
A compiler for generating reliability artifacts from service expectation definitions.
Current section
Files
Jump to
Current section
Files
src/caffeine_lang/linker/ir.gleam
/// Core IR types for the Caffeine compiler pipeline.
/// These types represent the intermediate representation between linking and code generation.
/// The phantom type parameter `phase` tracks pipeline progress at the type level.
import caffeine_lang/analysis/vendor.{type Vendor}
import caffeine_lang/helpers.{type ValueTuple}
import caffeine_lang/identifiers.{
type ExpectationLabel, type MeasurementName, type OrgName, type ServiceName,
type TeamName,
}
import caffeine_lang/linker/artifacts.{type DependencyRelationType}
import gleam/dict
import gleam/option.{type Option}
/// Marker type for IRs freshly built by the linker.
pub type Linked
/// Marker type for IRs with validated dependencies.
pub type DepsValidated
/// Marker type for IRs with resolved indicators.
pub type Resolved
/// Structured SLO artifact fields extracted from raw values.
///
/// `description` is the SLO description text (sourced from `###` doc comments
/// preceding the expectation in the source file). Datadog codegen renders it
/// into the `description` attribute, optionally combined with the runbook link.
pub type SloFields {
SloFields(
threshold: Float,
indicators: dict.Dict(String, String),
window_in_days: Int,
evaluation: Option(String),
tags: List(#(String, String)),
runbook: Option(String),
depends_on: Option(dict.Dict(DependencyRelationType, List(String))),
description: Option(String),
)
}
/// Internal representation of a parsed expectation with metadata and values.
/// The phantom type parameter `phase` tracks pipeline progress:
/// - `Linked`: freshly built by the linker
/// - `DepsValidated`: dependencies have been validated
/// - `Resolved`: indicators have been resolved by semantic analysis
pub type IntermediateRepresentation(phase) {
IntermediateRepresentation(
metadata: IntermediateRepresentationMetaData,
unique_identifier: String,
values: List(ValueTuple),
slo: SloFields,
vendor: Option(Vendor),
)
}
/// Metadata associated with an intermediate representation including organization and service identifiers.
/// Fields use newtype wrappers to prevent accidental mixing of identifier kinds.
pub type IntermediateRepresentationMetaData {
IntermediateRepresentationMetaData(
friendly_label: ExpectationLabel,
org_name: OrgName,
service_name: ServiceName,
measurement_name: MeasurementName,
team_name: TeamName,
/// Metadata specific to any given expectation.
misc: dict.Dict(String, List(String)),
)
}
/// Promotes an IR to a new phantom phase by reconstructing all fields.
@internal
pub fn promote(
ir: IntermediateRepresentation(a),
) -> IntermediateRepresentation(b) {
IntermediateRepresentation(
metadata: ir.metadata,
unique_identifier: ir.unique_identifier,
values: ir.values,
slo: ir.slo,
vendor: ir.vendor,
)
}
/// Build a dotted identifier from IR metadata: org.team.service.name.
@internal
pub fn ir_to_identifier(ir: IntermediateRepresentation(phase)) -> String {
ir.metadata.org_name.value
<> "."
<> ir.metadata.team_name.value
<> "."
<> ir.metadata.service_name.value
<> "."
<> ir.metadata.friendly_label.value
}
/// Update SloFields within an IR using a transformation function.
@internal
pub fn map_slo(
ir: IntermediateRepresentation(a),
updater: fn(SloFields) -> SloFields,
) -> IntermediateRepresentation(a) {
IntermediateRepresentation(..ir, slo: updater(ir.slo))
}