(headers)
| 83 | * @category decoding |
| 84 | */ |
| 85 | export const w3c: FromHeaders = (headers) => { |
| 86 | if (!(headers["traceparent"])) { |
| 87 | return Option.none() |
| 88 | } |
| 89 | const parts = headers["traceparent"].split("-") |
| 90 | if (parts.length !== 4) { |
| 91 | return Option.none() |
| 92 | } |
| 93 | const [version, traceId, spanId, flags] = parts |
| 94 | switch (version) { |
| 95 | case "00": { |
| 96 | if (w3cTraceId.test(traceId) === false || w3cSpanId.test(spanId) === false) { |
| 97 | return Option.none() |
| 98 | } |
| 99 | return Option.some(Tracer.externalSpan({ |
| 100 | traceId, |
| 101 | spanId, |
| 102 | sampled: (parseInt(flags, 16) & 1) === 1 |
| 103 | })) |
| 104 | } |
| 105 | default: { |
| 106 | return Option.none() |
| 107 | } |
| 108 | } |
| 109 | } |
no test coverage detected