Packages
caffeine_lang
0.0.16
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/compiler.gleam
import caffeine_lang/errors/semantic as semantic_errors
import caffeine_lang/phase_2/linker/organization/linker
import caffeine_lang/phase_3/semantic
import caffeine_lang/phase_4/slo_resolver
import caffeine_lang/phase_5/terraform/generator
import gleam/io
pub fn compile(
specification_directory: String,
instantiation_directory: String,
output_directory: String,
) -> Nil {
io.println("1️⃣ Compiling...")
io.println("\tSpecification directory: " <> specification_directory)
io.println("\tInstantiation directory: " <> instantiation_directory)
io.println("\tOutput directory: " <> output_directory)
let organization_result =
linker.link_specification_and_instantiation(
specification_directory,
instantiation_directory,
)
case organization_result {
Ok(organization) -> {
io.println("2️⃣ Parsed and linked successfully!")
let result = semantic.perform_semantic_analysis(organization)
case result {
Ok(_) -> {
io.println("3️⃣ Semantic analysis successful!")
io.println("4️⃣ Resolving SLOs...")
let resolved_slos = slo_resolver.resolve_slos(organization)
io.println("Resolved SLOs successfully!")
case resolved_slos {
Ok(resolved_slos) -> {
io.println("5️⃣ Generating...")
let _generated =
generator.generate(resolved_slos, output_directory)
io.println("🎉Generated successfully!")
}
Error(e) -> {
io.println_error(e)
}
}
}
Error(e) -> {
case e {
semantic_errors.UndefinedServiceError(_service_names) ->
io.println_error("Undefined service error.")
semantic_errors.UndefinedSliTypeError(_sli_type_names) ->
io.println_error("Undefined sli type error.")
semantic_errors.InvalidSloThresholdError(_thresholds) ->
io.println_error("Invalid sli threshold error.")
semantic_errors.DuplicateServiceError(_service_names) ->
io.println_error("Duplicate service error.")
}
}
}
}
Error(e) -> io.println_error(e)
}
}