Packages
caffeine_lang
5.0.8
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.
pub type Vendor {
Datadog
Honeycomb
Dynatrace
NewRelic
}
/// 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)
v if v == constants.vendor_honeycomb -> Ok(Honeycomb)
v if v == constants.vendor_dynatrace -> Ok(Dynatrace)
v if v == constants.vendor_newrelic -> Ok(NewRelic)
_ -> 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
Honeycomb -> constants.vendor_honeycomb
Dynatrace -> constants.vendor_dynatrace
NewRelic -> constants.vendor_newrelic
}
}
/// 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
}
}