File Coverage

blib/lib/SBOM/CycloneDX/Enum.pm
Criterion Covered Total %
statement 93 93 100.0
branch 3 4 75.0
condition n/a
subroutine 31 31 100.0
pod 1 1 100.0
total 128 129 99.2


line stmt bran cond sub pod time code
1             package SBOM::CycloneDX::Enum;
2              
3 16     16   230839 use 5.010001;
  16         62  
4 16     16   88 use strict;
  16         29  
  16         484  
5 16     16   90 use warnings;
  16         28  
  16         905  
6 16     16   444 use utf8;
  16         240  
  16         139  
7              
8             require SBOM::CycloneDX::Schema;
9             require SBOM::CycloneDX::Util;
10              
11 16     16   9640 use SBOM::CycloneDX::Enum::AggregateType;
  16         52  
  16         1016  
12 16     16   8103 use SBOM::CycloneDX::Enum::CommonExtensionName;
  16         48  
  16         934  
13 16     16   8349 use SBOM::CycloneDX::Enum::ComponentType;
  16         47  
  16         880  
14 16     16   7504 use SBOM::CycloneDX::Enum::CryptoAssetType;
  16         50  
  16         905  
15 16     16   7946 use SBOM::CycloneDX::Enum::CryptoCertificationLevel;
  16         66  
  16         902  
16 16     16   8135 use SBOM::CycloneDX::Enum::CryptoFunction;
  16         45  
  16         876  
17 16     16   7927 use SBOM::CycloneDX::Enum::CryptoImplementationPlatform;
  16         48  
  16         900  
18 16     16   7807 use SBOM::CycloneDX::Enum::CryptoMode;
  16         59  
  16         958  
19 16     16   8051 use SBOM::CycloneDX::Enum::CryptoPadding;
  16         53  
  16         862  
20 16     16   9885 use SBOM::CycloneDX::Enum::CryptoPrimitive;
  16         97  
  16         977  
21 16     16   8715 use SBOM::CycloneDX::Enum::ExternalReferenceType;
  16         52  
  16         1032  
22 16     16   7845 use SBOM::CycloneDX::Enum::HashAlgorithm;
  16         55  
  16         931  
23 16     16   8103 use SBOM::CycloneDX::Enum::ImpactAnalysisJustification;
  16         55  
  16         930  
24 16     16   8055 use SBOM::CycloneDX::Enum::ImpactAnalysisState;
  16         49  
  16         869  
25 16     16   7901 use SBOM::CycloneDX::Enum::LicenseType;
  16         52  
  16         912  
26 16     16   8017 use SBOM::CycloneDX::Enum::LifecyclePhase;
  16         83  
  16         961  
27 16     16   8313 use SBOM::CycloneDX::Enum::PatentAssertionType;
  16         54  
  16         922  
28 16     16   9041 use SBOM::CycloneDX::Enum::PatentLegalStatus;
  16         53  
  16         956  
29 16     16   7862 use SBOM::CycloneDX::Enum::ProtocolType;
  16         48  
  16         897  
30 16     16   7637 use SBOM::CycloneDX::Enum::RelatedCryptoMaterialState;
  16         52  
  16         810  
31 16     16   8226 use SBOM::CycloneDX::Enum::RelatedCryptoMaterialType;
  16         47  
  16         956  
32 16     16   7708 use SBOM::CycloneDX::Enum::TlpClassification;
  16         48  
  16         972  
33              
34 16     16   919 use Cpanel::JSON::XS qw(decode_json);
  16         3218  
  16         901  
35              
36 16     16   90 use Exporter 'import';
  16         55  
  16         2653  
37              
38             our @EXPORT_OK = qw(
39             AGGREGATE_TYPE
40             COMMON_EXTENSION_NAME
41             COMPONENT_TYPE
42             CRYPTO_ASSET_TYPE
43             CRYPTO_CERTIFICATION_LEVEL
44             CRYPTO_FUNCTION
45             CRYPTO_IMPLEMENTATION_PLATFORM
46             CRYPTO_MODE
47             CRYPTO_PADDING
48             CRYPTO_PRIMITIVE
49             EXTERNAL_REFERENCE_TYPE
50             HASH_ALGORITHM
51             IMPACT_ANALYSIS_JUSTIFICATION
52             IMPACT_ANALYSIS_STATE
53             LICENSE_TYPE
54             LIFECYCLE_PHASE
55             PATENT_ASSERTION_TYPE
56             PATENT_LEGAL_STATUS
57             PROTOCOL_TYPE
58             RELATED_CRYPTO_MATERIAL_STATE
59             RELATED_CRYPTO_MATERIAL_TYPE
60             TLP_CLASSIFICATION
61             );
62              
63             state @SPDX_LICENSES;
64              
65             unless (@SPDX_LICENSES) {
66             my $spdx_json_schema_file = SBOM::CycloneDX::Schema::schema_file('spdx.schema.json');
67             my $spdx_json_schema = decode_json(SBOM::CycloneDX::Util::file_read($spdx_json_schema_file));
68              
69             @SPDX_LICENSES = @{$spdx_json_schema->{enum}};
70             }
71              
72 16     16   104 use constant SPDX_LICENSES => \@SPDX_LICENSES;
  16         28  
  16         2240  
73              
74             use constant {
75 16         5930 AGGREGATE_TYPE => 'SBOM::CycloneDX::Enum::AggregateType',
76             COMMON_EXTENSION_NAME => 'SBOM::CycloneDX::Enum::CommonExtensionName',
77             COMPONENT_TYPE => 'SBOM::CycloneDX::Enum::ComponentType',
78             CRYPTO_ASSET_TYPE => 'SBOM::CycloneDX::Enum::CryptoAssetType',
79             CRYPTO_CERTIFICATION_LEVEL => 'SBOM::CycloneDX::Enum::CryptoCertificationLevel',
80             CRYPTO_FUNCTION => 'SBOM::CycloneDX::Enum::CryptoFunction',
81             CRYPTO_IMPLEMENTATION_PLATFORM => 'SBOM::CycloneDX::Enum::CryptoImplementationPlatform',
82             CRYPTO_MODE => 'SBOM::CycloneDX::Enum::CryptoMode',
83             CRYPTO_PADDING => 'SBOM::CycloneDX::Enum::CryptoPadding',
84             CRYPTO_PRIMITIVE => 'SBOM::CycloneDX::Enum::CryptoPrimitive',
85             EXTERNAL_REFERENCE_TYPE => 'SBOM::CycloneDX::Enum::ExternalReferenceType',
86             HASH_ALGORITHM => 'SBOM::CycloneDX::Enum::HashAlgorithm',
87             IMPACT_ANALYSIS_JUSTIFICATION => 'SBOM::CycloneDX::Enum::ImpactAnalysisJustification',
88             IMPACT_ANALYSIS_STATE => 'SBOM::CycloneDX::Enum::ImpactAnalysisState',
89             LICENSE_TYPE => 'SBOM::CycloneDX::Enum::LicenseType',
90             LIFECYCLE_PHASE => 'SBOM::CycloneDX::Enum::LifecyclePhase',
91             PATENT_ASSERTION_TYPE => 'SBOM::CycloneDX::Enum::PatentAssertionType',
92             PATENT_LEGAL_STATUS => 'SBOM::CycloneDX::Enum::PatentLegalStatus',
93             PROTOCOL_TYPE => 'SBOM::CycloneDX::Enum::ProtocolType',
94             RELATED_CRYPTO_MATERIAL_STATE => 'SBOM::CycloneDX::Enum::RelatedCryptoMaterialState',
95             RELATED_CRYPTO_MATERIAL_TYPE => 'SBOM::CycloneDX::Enum::RelatedCryptoMaterialType',
96             TLP_CLASSIFICATION => 'SBOM::CycloneDX::Enum::TlpClassification',
97 16     16   100 };
  16         26  
98              
99             sub values {
100 89     89 1 124530 my ($class, $enum) = @_;
101              
102 89 50       1670 if (my $ref = $class->can($enum)) {
103 89         1015 my @values = ($ref->())->values();
104 89 100       1158 return wantarray ? @values : \@values;
105             }
106             }
107              
108             1;
109              
110             =encoding utf-8
111              
112             =head1 NAME
113              
114             SBOM::CycloneDX::Enum - Enumeration
115              
116             =head1 SYNOPSIS
117              
118             use SBOM::CycloneDX::Enum qw(COMPONENT_TYPE);
119              
120             $bom->component( type => COMPONENT_TYPE->APPLICATION );
121              
122              
123             use SBOM::CycloneDX::Enum::ComponentType qw(:all);
124              
125             $bom->component( type => APPLICATION );
126              
127              
128             use SBOM::CycloneDX::Enum::ComponentType;
129              
130             $bom->component( type => SBOM::CycloneDX::Enum::ComponentType->APPLICATION );
131              
132              
133             use SBOM::CycloneDX::Enum;
134              
135             say $_ for (@{ SBOM::CycloneDX::Enum->SPDX_LICENSES });
136              
137              
138             say $_ for (@{ SBOM::CycloneDX::Enum->values('EXTERNAL_REFERENCE_TYPE') });
139              
140             =head1 DESCRIPTION
141              
142             L is internal class used by L.
143              
144              
145             =head1 METHODS
146              
147             =over
148              
149             =item SBOM::CycloneDX::Enum->values( $CONSTANT )
150              
151             Return the provided C Enum values.
152              
153             =back
154              
155             =head1 CONSTANTS
156              
157             =over
158              
159             =item * C, L
160              
161             =item * C, L
162              
163             =item * C, L
164              
165             =item * C, L
166              
167             =item * C, L
168              
169             =item * C, L
170              
171             =item * C , L
172              
173             =item * C, L
174              
175             =item * C, L
176              
177             =item * C, L
178              
179             =item * C, L
180              
181             =item * C, L
182              
183             =item * C, L
184              
185             =item * C, L
186              
187             =item * C, L
188              
189             =item * C, L
190              
191             =item * C, L
192              
193             =item * C, L
194              
195             =item * C, L
196              
197             =item * C, L
198              
199             =item * C, L
200              
201             =item * C, L
202              
203             =back
204              
205             =head1 SUPPORT
206              
207             =head2 Bugs / Feature Requests
208              
209             Please report any bugs or feature requests through the issue tracker
210             at L.
211             You will be notified automatically of any progress on your issue.
212              
213             =head2 Source Code
214              
215             This is open source software. The code repository is available for
216             public review and contribution under the terms of the license.
217              
218             L
219              
220             git clone https://github.com/giterlizzi/perl-SBOM-CycloneDX.git
221              
222              
223             =head1 AUTHOR
224              
225             =over 4
226              
227             =item * Giuseppe Di Terlizzi
228              
229             =back
230              
231              
232             =head1 LICENSE AND COPYRIGHT
233              
234             This software is copyright (c) 2025-2026 by Giuseppe Di Terlizzi.
235              
236             This is free software; you can redistribute it and/or modify it under
237             the same terms as the Perl 5 programming language system itself.
238              
239             =cut