File Coverage

blib/lib/SBOM/CycloneDX/Enum.pm
Criterion Covered Total %
statement 90 90 100.0
branch 3 4 75.0
condition n/a
subroutine 30 30 100.0
pod 1 1 100.0
total 124 125 99.2


line stmt bran cond sub pod time code
1             package SBOM::CycloneDX::Enum;
2              
3 16     16   252159 use 5.010001;
  16         89  
4 16     16   119 use strict;
  16         36  
  16         664  
5 16     16   87 use warnings;
  16         40  
  16         1053  
6 16     16   542 use utf8;
  16         290  
  16         188  
7              
8             require SBOM::CycloneDX::Schema;
9             require SBOM::CycloneDX::Util;
10              
11 16     16   10033 use SBOM::CycloneDX::Enum::CommonExtensionName;
  16         57  
  16         1148  
12 16     16   8584 use SBOM::CycloneDX::Enum::ComponentType;
  16         58  
  16         987  
13 16     16   8501 use SBOM::CycloneDX::Enum::CryptoAssetType;
  16         64  
  16         955  
14 16     16   8286 use SBOM::CycloneDX::Enum::CryptoCertificationLevel;
  16         69  
  16         958  
15 16     16   9279 use SBOM::CycloneDX::Enum::CryptoFunction;
  16         53  
  16         970  
16 16     16   8488 use SBOM::CycloneDX::Enum::CryptoImplementationPlatform;
  16         55  
  16         993  
17 16     16   8496 use SBOM::CycloneDX::Enum::CryptoMode;
  16         75  
  16         931  
18 16     16   8273 use SBOM::CycloneDX::Enum::CryptoPadding;
  16         55  
  16         995  
19 16     16   9097 use SBOM::CycloneDX::Enum::CryptoPrimitive;
  16         56  
  16         974  
20 16     16   9407 use SBOM::CycloneDX::Enum::ExternalReferenceType;
  16         91  
  16         1199  
21 16     16   8338 use SBOM::CycloneDX::Enum::HashAlgorithm;
  16         54  
  16         1026  
22 16     16   9528 use SBOM::CycloneDX::Enum::ImpactAnalysisJustification;
  16         56  
  16         1064  
23 16     16   8643 use SBOM::CycloneDX::Enum::ImpactAnalysisState;
  16         82  
  16         955  
24 16     16   8538 use SBOM::CycloneDX::Enum::LicenseType;
  16         53  
  16         1055  
25 16     16   8605 use SBOM::CycloneDX::Enum::LifecyclePhase;
  16         61  
  16         1124  
26 16     16   8529 use SBOM::CycloneDX::Enum::PatentAssertionType;
  16         51  
  16         948  
27 16     16   8704 use SBOM::CycloneDX::Enum::PatentLegalStatus;
  16         55  
  16         989  
28 16     16   8856 use SBOM::CycloneDX::Enum::ProtocolType;
  16         55  
  16         1019  
29 16     16   8445 use SBOM::CycloneDX::Enum::RelatedCryptoMaterialState;
  16         55  
  16         1071  
30 16     16   9163 use SBOM::CycloneDX::Enum::RelatedCryptoMaterialType;
  16         62  
  16         959  
31 16     16   8499 use SBOM::CycloneDX::Enum::TlpClassification;
  16         57  
  16         1127  
32              
33 16     16   1104 use Cpanel::JSON::XS qw(decode_json);
  16         4083  
  16         1133  
34              
35 16     16   122 use Exporter 'import';
  16         36  
  16         3109  
36              
37             our @EXPORT_OK = qw(
38             COMMON_EXTENSION_NAME
39             COMPONENT_TYPE
40             CRYPTO_ASSET_TYPE
41             CRYPTO_CERTIFICATION_LEVEL
42             CRYPTO_FUNCTION
43             CRYPTO_IMPLEMENTATION_PLATFORM
44             CRYPTO_MODE
45             CRYPTO_PADDING
46             CRYPTO_PRIMITIVE
47             EXTERNAL_REFERENCE_TYPE
48             HASH_ALGORITHM
49             IMPACT_ANALYSIS_JUSTIFICATION
50             IMPACT_ANALYSIS_STATE
51             LICENSE_TYPE
52             LIFECYCLE_PHASE
53             PATENT_ASSERTION_TYPE
54             PATENT_LEGAL_STATUS
55             PROTOCOL_TYPE
56             RELATED_CRYPTO_MATERIAL_STATE
57             RELATED_CRYPTO_MATERIAL_TYPE
58             TLP_CLASSIFICATION
59             );
60              
61             state @SPDX_LICENSES;
62              
63             unless (@SPDX_LICENSES) {
64             my $spdx_json_schema_file = SBOM::CycloneDX::Schema::schema_file('spdx.schema.json');
65             my $spdx_json_schema = decode_json(SBOM::CycloneDX::Util::file_read($spdx_json_schema_file));
66              
67             @SPDX_LICENSES = @{$spdx_json_schema->{enum}};
68             }
69              
70 16     16   124 use constant SPDX_LICENSES => \@SPDX_LICENSES;
  16         33  
  16         2644  
71              
72             use constant {
73 16         6552 COMMON_EXTENSION_NAME => 'SBOM::CycloneDX::Enum::CommonExtensionName',
74             COMPONENT_TYPE => 'SBOM::CycloneDX::Enum::ComponentType',
75             CRYPTO_ASSET_TYPE => 'SBOM::CycloneDX::Enum::CryptoAssetType',
76             CRYPTO_CERTIFICATION_LEVEL => 'SBOM::CycloneDX::Enum::CryptoCertificationLevel',
77             CRYPTO_FUNCTION => 'SBOM::CycloneDX::Enum::CryptoFunction',
78             CRYPTO_IMPLEMENTATION_PLATFORM => 'SBOM::CycloneDX::Enum::CryptoImplementationPlatform',
79             CRYPTO_MODE => 'SBOM::CycloneDX::Enum::CryptoMode',
80             CRYPTO_PADDING => 'SBOM::CycloneDX::Enum::CryptoPadding',
81             CRYPTO_PRIMITIVE => 'SBOM::CycloneDX::Enum::CryptoPrimitive',
82             EXTERNAL_REFERENCE_TYPE => 'SBOM::CycloneDX::Enum::ExternalReferenceType',
83             HASH_ALGORITHM => 'SBOM::CycloneDX::Enum::HashAlgorithm',
84             IMPACT_ANALYSIS_JUSTIFICATION => 'SBOM::CycloneDX::Enum::ImpactAnalysisJustification',
85             IMPACT_ANALYSIS_STATE => 'SBOM::CycloneDX::Enum::ImpactAnalysisState',
86             LICENSE_TYPE => 'SBOM::CycloneDX::Enum::LicenseType',
87             LIFECYCLE_PHASE => 'SBOM::CycloneDX::Enum::LifecyclePhase',
88             PATENT_ASSERTION_TYPE => 'SBOM::CycloneDX::Enum::PatentAssertionType',
89             PATENT_LEGAL_STATUS => 'SBOM::CycloneDX::Enum::PatentLegalStatus',
90             PROTOCOL_TYPE => 'SBOM::CycloneDX::Enum::ProtocolType',
91             RELATED_CRYPTO_MATERIAL_STATE => 'SBOM::CycloneDX::Enum::RelatedCryptoMaterialState',
92             RELATED_CRYPTO_MATERIAL_TYPE => 'SBOM::CycloneDX::Enum::RelatedCryptoMaterialType',
93             TLP_CLASSIFICATION => 'SBOM::CycloneDX::Enum::TlpClassification',
94 16     16   136 };
  16         35  
95              
96             sub values {
97 89     89 1 104967 my ($class, $enum) = @_;
98              
99 89 50       1758 if (my $ref = $class->can($enum)) {
100 89         1085 my @values = ($ref->())->values();
101 89 100       1198 return wantarray ? @values : \@values;
102             }
103             }
104              
105             1;
106              
107             =encoding utf-8
108              
109             =head1 NAME
110              
111             SBOM::CycloneDX::Enum - Enumeration
112              
113             =head1 SYNOPSIS
114              
115             use SBOM::CycloneDX::Enum qw(COMPONENT_TYPE);
116              
117             $bom->component( type => COMPONENT_TYPE->APPLICATION );
118              
119              
120             use SBOM::CycloneDX::Enum::ComponentType qw(:all);
121              
122             $bom->component( type => APPLICATION );
123              
124              
125             use SBOM::CycloneDX::Enum::ComponentType;
126              
127             $bom->component( type => SBOM::CycloneDX::Enum::ComponentType->APPLICATION );
128              
129              
130             use SBOM::CycloneDX::Enum;
131              
132             say $_ for (@{ SBOM::CycloneDX::Enum->SPDX_LICENSES });
133              
134              
135             say $_ for (@{ SBOM::CycloneDX::Enum->values('EXTERNAL_REFERENCE_TYPE') });
136              
137             =head1 DESCRIPTION
138              
139             L is internal class used by L.
140              
141              
142             =head1 METHODS
143              
144             =over
145              
146             =item SBOM::CycloneDX::Enum->values( $CONSTANT )
147              
148             Return the provided C Enum values.
149              
150             =back
151              
152             =head1 CONSTANTS
153              
154             =over
155              
156             =item * C, L
157              
158             =item * C, L
159              
160             =item * C, L
161              
162             =item * C, L
163              
164             =item * C, L
165              
166             =item * C , L
167              
168             =item * C, L
169              
170             =item * C, L
171              
172             =item * C, L
173              
174             =item * C, L
175              
176             =item * C, L
177              
178             =item * C, L
179              
180             =item * C, L
181              
182             =item * C, L
183              
184             =item * C, L
185              
186             =item * C, L
187              
188             =item * C, L
189              
190             =item * C, L
191              
192             =item * C, L
193              
194             =item * C, L
195              
196             =item * C, L
197              
198             =back
199              
200             =head1 SUPPORT
201              
202             =head2 Bugs / Feature Requests
203              
204             Please report any bugs or feature requests through the issue tracker
205             at L.
206             You will be notified automatically of any progress on your issue.
207              
208             =head2 Source Code
209              
210             This is open source software. The code repository is available for
211             public review and contribution under the terms of the license.
212              
213             L
214              
215             git clone https://github.com/giterlizzi/perl-SBOM-CycloneDX.git
216              
217              
218             =head1 AUTHOR
219              
220             =over 4
221              
222             =item * Giuseppe Di Terlizzi
223              
224             =back
225              
226              
227             =head1 LICENSE AND COPYRIGHT
228              
229             This software is copyright (c) 2025-2026 by Giuseppe Di Terlizzi.
230              
231             This is free software; you can redistribute it and/or modify it under
232             the same terms as the Perl 5 programming language system itself.
233              
234             =cut