Packages
caffeine_lang
4.8.1
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/linker.gleam
import caffeine_lang/errors.{type CompilationError}
import caffeine_lang/frontend/pipeline
import caffeine_lang/linker/artifacts.{type Artifact}
import caffeine_lang/linker/blueprints
import caffeine_lang/linker/expectations
import caffeine_lang/linker/ir.{type IntermediateRepresentation, type Linked}
import caffeine_lang/linker/ir_builder
import caffeine_lang/source_file.{
type BlueprintSource, type ExpectationSource, type SourceFile,
}
import gleam/list
import gleam/result
/// Links a blueprint and expectation sources into intermediate representations.
/// All file reading happens before this function is called — it operates purely
/// on in-memory source content.
@internal
pub fn link(
blueprint: SourceFile(BlueprintSource),
expectation_sources: List(SourceFile(ExpectationSource)),
artifacts artifacts: List(Artifact),
) -> Result(List(IntermediateRepresentation(Linked)), CompilationError) {
let reserved_labels = ir_builder.reserved_labels_from_artifacts(artifacts)
// Compile blueprints .caffeine source, then validate
use raw_blueprints <- result.try(pipeline.compile_blueprints(blueprint))
use validated_blueprints <- result.try(blueprints.validate_blueprints(
raw_blueprints,
artifacts,
))
use expectations_with_paths <- result.try(parse_expectation_sources(
expectation_sources,
validated_blueprints,
))
ir_builder.build_all(expectations_with_paths, reserved_labels:)
}
fn parse_expectation_sources(
sources: List(SourceFile(ExpectationSource)),
validated_blueprints: List(
blueprints.Blueprint(blueprints.BlueprintValidated),
),
) {
sources
|> list.map(fn(source) {
pipeline.compile_expects(source)
|> result.try(fn(raw_expectations) {
expectations.validate_expectations(
raw_expectations,
validated_blueprints,
from: source.path,
)
})
|> result.map(fn(exps) { #(exps, source.path) })
})
|> errors.from_results()
}