File Coverage

blib/lib/OpenTelemetry/Baggage.pm
Criterion Covered Total %
statement 70 70 100.0
branch 2 2 100.0
condition 12 17 70.5
subroutine 14 14 100.0
pod 6 6 100.0
total 104 109 95.4


line stmt bran cond sub pod time code
1 5     5   244601 use Object::Pad ':experimental(init_expr)';
  5         9917  
  5         42  
2             # ABSTRACT: Records and propagates baggage in a distributed trace
3              
4 5     5   1093 use experimental qw( signatures lexical_subs );
  5         11  
  5         34  
5 5     5   1301 use OpenTelemetry::Context;
  5         11  
  5         944  
6              
7             my $BAGGAGE_KEY = OpenTelemetry::Context->key('baggage');
8              
9             package
10             OpenTelemetry::Baggage::Entry;
11              
12             our $VERSION = '0.033';
13              
14             class OpenTelemetry::Baggage::Entry {
15 12     12   3411 field $value :param :reader;
  12         159  
16             field $meta :param :reader = {};
17 10     10   669 }
  10         40  
18              
19             package
20             OpenTelemetry::Baggage::Builder;
21              
22             our $VERSION = '0.033';
23              
24             class OpenTelemetry::Baggage::Builder {
25             field %data;
26              
27 4     4   7 method set ( $name, $value, $meta = undef ) {
  4         10  
  4         127  
  4         44  
  4         11  
  4         4  
28 4         36 $data{$name} = OpenTelemetry::Baggage::Entry->new(
29             value => $value,
30             meta => $meta,
31             );
32 4         15 $self;
33             }
34              
35 3     3   6 method build ( $context = undef ) {
  3         10  
  3         7  
  3         6  
36 3   66     18 $context //= OpenTelemetry::Context->current;
37 3         25 $context->set( $BAGGAGE_KEY => { %data } );
38             }
39             }
40              
41             package OpenTelemetry::Baggage;
42              
43             our $VERSION = '0.033';
44              
45 33     33   55 my sub from_context ( $context = undef ) {
  33         52  
  33         65  
46 33   66     148 ( $context // OpenTelemetry::Context->current )->get($BAGGAGE_KEY) // {}
      100        
47             }
48              
49 7     7 1 4927 sub set ( $, $name, $value, $meta = undef, $context = undef ) {
  7         23  
  7         17  
  7         18  
  7         17  
  7         13  
50 7   66     103 $context //= OpenTelemetry::Context->current;
51              
52 7         50 my %new = %{ from_context $context };
  7         28  
53 7         108 $new{$name} = OpenTelemetry::Baggage::Entry->new(
54             value => $value,
55             meta => $meta,
56             );
57              
58 7         70 $context->set( $BAGGAGE_KEY => \%new );
59             }
60              
61 8     8 1 5728 sub get ( $, $name, $context = undef ) {
  8         17  
  8         15  
  8         10  
62 8         21 from_context($context)->{$name}
63             }
64              
65 15     15 1 2026 sub all ( $, $context = undef ) {
  15         29  
  15         23  
66 15         39 %{ from_context($context) }
  15         128  
67             }
68              
69 3     3 1 541 sub delete ( $, $name, $context = undef ) {
  3         5  
  3         4  
  3         5  
70 3   66     11 $context //= OpenTelemetry::Context->current;
71              
72 3         7 my %new = %{ from_context $context };
  3         6  
73 3 100       21 return $context unless exists $new{$name};
74              
75 1         2 delete $new{$name};
76 1         4 $context->set( $BAGGAGE_KEY => \%new );
77             }
78              
79 3     3 1 245 sub clear ( $, $context = undef ) {
  3         4  
  3         3  
80 3   66     13 $context //= OpenTelemetry::Context->current;
81 3         16 $context->delete($BAGGAGE_KEY);
82             }
83              
84 3     3 1 2539 sub builder ( $ ) {
  3         4  
85 3         49 OpenTelemetry::Baggage::Builder->new;
86             }
87              
88             1;