Packages
caffeine_lang
5.3.0
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/analysis/vendor.gleam
import caffeine_lang/constants
import gleam/list
import gleam/string
/// Supported monitoring and observability platform vendors.
///
/// Currently only Datadog has a generator implementation. The enum exists
/// as the extension point for additional vendors: adding one requires a
/// variant here, a generator module under `codegen/`, a `Platform`
/// constructor in `codegen/platforms.gleam`, and a vendor constant in
/// `constants.gleam`.
pub type Vendor {
Datadog
}
/// Parses a vendor string and returns the corresponding Vendor type.
/// Returns Error(Nil) for unrecognized vendor strings.
@internal
pub fn resolve_vendor(vendor_str: String) -> Result(Vendor, Nil) {
case vendor_str {
v if v == constants.vendor_datadog -> Ok(Datadog)
_ -> Error(Nil)
}
}
/// Extracts the vendor from a file path by using the filename stem.
/// For example, "measurements/datadog.caffeine" resolves to Ok(Datadog).
@internal
pub fn resolve_vendor_from_path(path: String) -> Result(Vendor, Nil) {
path
|> extract_stem
|> resolve_vendor
}
/// Converts a Vendor to its string representation.
@internal
pub fn vendor_to_string(v: Vendor) -> String {
case v {
Datadog -> constants.vendor_datadog
}
}
/// Extracts the filename stem from a path (basename without extension).
fn extract_stem(path: String) -> String {
let base = case string.split(path, "/") {
[] -> path
parts -> {
let assert Ok(last) = list.last(parts)
last
}
}
case string.split(base, ".") {
[stem, ..] -> stem
[] -> base
}
}