Filename | /Users/ether/.perlbrew/libs/36.0@std/lib/perl5/JSON/Schema/Modern/Vocabulary/Content.pm |
Statements | Executed 56 statements in 845µs |
Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
---|---|---|---|---|---|
1 | 1 | 1 | 51µs | 63µs | _traverse_keyword_contentMediaType | JSON::Schema::Modern::Vocabulary::Content::
1 | 1 | 1 | 27µs | 29µs | BEGIN@1.317 | Module::Runtime::
1 | 1 | 1 | 20µs | 92µs | _traverse_keyword_contentSchema | JSON::Schema::Modern::Vocabulary::Content::
1 | 1 | 1 | 13µs | 21µs | BEGIN@14 | JSON::Schema::Modern::Vocabulary::Content::
1 | 1 | 1 | 11µs | 569µs | BEGIN@11 | JSON::Schema::Modern::Vocabulary::Content::
1 | 1 | 1 | 9µs | 24µs | BEGIN@13 | JSON::Schema::Modern::Vocabulary::Content::
1 | 1 | 1 | 8µs | 8µs | BEGIN@9 | JSON::Schema::Modern::Vocabulary::Content::
1 | 1 | 1 | 6µs | 25µs | BEGIN@17 | JSON::Schema::Modern::Vocabulary::Content::
1 | 1 | 1 | 6µs | 20µs | BEGIN@18 | JSON::Schema::Modern::Vocabulary::Content::
1 | 1 | 1 | 5µs | 189µs | BEGIN@10 | JSON::Schema::Modern::Vocabulary::Content::
1 | 1 | 1 | 5µs | 13µs | BEGIN@15 | JSON::Schema::Modern::Vocabulary::Content::
1 | 1 | 1 | 5µs | 16µs | BEGIN@16 | JSON::Schema::Modern::Vocabulary::Content::
1 | 1 | 1 | 5µs | 138µs | BEGIN@20 | JSON::Schema::Modern::Vocabulary::Content::
1 | 1 | 1 | 5µs | 12µs | _traverse_keyword_contentEncoding | JSON::Schema::Modern::Vocabulary::Content::
2 | 2 | 1 | 5µs | 5µs | keywords | JSON::Schema::Modern::Vocabulary::Content::
1 | 1 | 1 | 4µs | 74µs | BEGIN@12 | JSON::Schema::Modern::Vocabulary::Content::
1 | 1 | 1 | 4µs | 29µs | BEGIN@19 | JSON::Schema::Modern::Vocabulary::Content::
1 | 1 | 1 | 4µs | 25µs | BEGIN@2.318 | Module::Runtime::
3 | 1 | 1 | 1µs | 1µs | evaluation_order | JSON::Schema::Modern::Vocabulary::Content::
1 | 1 | 1 | 1µs | 1µs | vocabulary | JSON::Schema::Modern::Vocabulary::Content::
0 | 0 | 0 | 0s | 0s | _eval_keyword_contentEncoding | JSON::Schema::Modern::Vocabulary::Content::
0 | 0 | 0 | 0s | 0s | _eval_keyword_contentMediaType | JSON::Schema::Modern::Vocabulary::Content::
0 | 0 | 0 | 0s | 0s | _eval_keyword_contentSchema | JSON::Schema::Modern::Vocabulary::Content::
Line | State ments |
Time on line |
Calls | Time in subs |
Code |
---|---|---|---|---|---|
1 | 2 | 27µs | 2 | 31µs | # spent 29µs (27+2) within Module::Runtime::BEGIN@1.317 which was called:
# once (27µs+2µs) by Module::Runtime::require_module at line 1 # spent 29µs making 1 call to Module::Runtime::BEGIN@1.317
# spent 2µs making 1 call to strict::import |
2 | 2 | 34µs | 2 | 46µs | # spent 25µs (4+21) within Module::Runtime::BEGIN@2.318 which was called:
# once (4µs+21µs) by Module::Runtime::require_module at line 2 # spent 25µs making 1 call to Module::Runtime::BEGIN@2.318
# spent 21µs making 1 call to warnings::import |
3 | package JSON::Schema::Modern::Vocabulary::Content; | ||||
4 | # vim: set ts=8 sts=2 sw=2 tw=100 et : | ||||
5 | # ABSTRACT: Implementation of the JSON Schema Content vocabulary | ||||
6 | |||||
7 | 1 | 1µs | our $VERSION = '0.558'; | ||
8 | |||||
9 | 2 | 26µs | 1 | 8µs | # spent 8µs within JSON::Schema::Modern::Vocabulary::Content::BEGIN@9 which was called:
# once (8µs+0s) by Module::Runtime::require_module at line 9 # spent 8µs making 1 call to JSON::Schema::Modern::Vocabulary::Content::BEGIN@9 |
10 | 2 | 21µs | 2 | 373µs | # spent 189µs (5+184) within JSON::Schema::Modern::Vocabulary::Content::BEGIN@10 which was called:
# once (5µs+184µs) by Module::Runtime::require_module at line 10 # spent 189µs making 1 call to JSON::Schema::Modern::Vocabulary::Content::BEGIN@10
# spent 184µs making 1 call to Moo::import |
11 | 3 | 25µs | 3 | 1.13ms | # spent 569µs (11+558) within JSON::Schema::Modern::Vocabulary::Content::BEGIN@11 which was called:
# once (11µs+558µs) by Module::Runtime::require_module at line 11 # spent 569µs making 1 call to JSON::Schema::Modern::Vocabulary::Content::BEGIN@11
# spent 545µs making 1 call to strictures::import
# spent 13µs making 1 call to strictures::VERSION |
12 | 2 | 26µs | 2 | 144µs | # spent 74µs (4+70) within JSON::Schema::Modern::Vocabulary::Content::BEGIN@12 which was called:
# once (4µs+70µs) by Module::Runtime::require_module at line 12 # spent 74µs making 1 call to JSON::Schema::Modern::Vocabulary::Content::BEGIN@12
# spent 70µs making 1 call to experimental::import |
13 | 2 | 23µs | 2 | 24µs | # spent 24µs (9+15) within JSON::Schema::Modern::Vocabulary::Content::BEGIN@13 which was called:
# once (9µs+15µs) by Module::Runtime::require_module at line 13 # spent 24µs making 1 call to JSON::Schema::Modern::Vocabulary::Content::BEGIN@13
# spent 0s making 1 call to if::import |
14 | 2 | 17µs | 2 | 22µs | # spent 21µs (13+8) within JSON::Schema::Modern::Vocabulary::Content::BEGIN@14 which was called:
# once (13µs+8µs) by Module::Runtime::require_module at line 14 # spent 21µs making 1 call to JSON::Schema::Modern::Vocabulary::Content::BEGIN@14
# spent 1µs making 1 call to if::unimport |
15 | 2 | 14µs | 2 | 14µs | # spent 13µs (5+8) within JSON::Schema::Modern::Vocabulary::Content::BEGIN@15 which was called:
# once (5µs+8µs) by Module::Runtime::require_module at line 15 # spent 13µs making 1 call to JSON::Schema::Modern::Vocabulary::Content::BEGIN@15
# spent 1µs making 1 call to if::unimport |
16 | 2 | 12µs | 2 | 17µs | # spent 16µs (5+11) within JSON::Schema::Modern::Vocabulary::Content::BEGIN@16 which was called:
# once (5µs+11µs) by Module::Runtime::require_module at line 16 # spent 16µs making 1 call to JSON::Schema::Modern::Vocabulary::Content::BEGIN@16
# spent 1µs making 1 call to if::unimport |
17 | 2 | 17µs | 2 | 44µs | # spent 25µs (6+19) within JSON::Schema::Modern::Vocabulary::Content::BEGIN@17 which was called:
# once (6µs+19µs) by Module::Runtime::require_module at line 17 # spent 25µs making 1 call to JSON::Schema::Modern::Vocabulary::Content::BEGIN@17
# spent 19µs making 1 call to Exporter::import |
18 | 2 | 15µs | 2 | 34µs | # spent 20µs (6+14) within JSON::Schema::Modern::Vocabulary::Content::BEGIN@18 which was called:
# once (6µs+14µs) by Module::Runtime::require_module at line 18 # spent 20µs making 1 call to JSON::Schema::Modern::Vocabulary::Content::BEGIN@18
# spent 14µs making 1 call to Feature::Compat::Try::import |
19 | 2 | 16µs | 2 | 54µs | # spent 29µs (4+25) within JSON::Schema::Modern::Vocabulary::Content::BEGIN@19 which was called:
# once (4µs+25µs) by Module::Runtime::require_module at line 19 # spent 29µs making 1 call to JSON::Schema::Modern::Vocabulary::Content::BEGIN@19
# spent 25µs making 1 call to Exporter::import |
20 | 2 | 452µs | 2 | 271µs | # spent 138µs (5+133) within JSON::Schema::Modern::Vocabulary::Content::BEGIN@20 which was called:
# once (5µs+133µs) by Module::Runtime::require_module at line 20 # spent 138µs making 1 call to JSON::Schema::Modern::Vocabulary::Content::BEGIN@20
# spent 133µs making 1 call to namespace::clean::import |
21 | |||||
22 | 1 | 1µs | 1 | 359µs | with 'JSON::Schema::Modern::Vocabulary'; # spent 359µs making 1 call to Moo::with |
23 | |||||
24 | # spent 1µs within JSON::Schema::Modern::Vocabulary::Content::vocabulary which was called:
# once (1µs+0s) by JSON::Schema::Modern::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/JSON/Schema/Modern.pm:700] at line 696 of JSON/Schema/Modern.pm | ||||
25 | 1 | 2µs | 'https://json-schema.org/draft/2019-09/vocab/content' => 'draft2019-09', | ||
26 | 'https://json-schema.org/draft/2020-12/vocab/content' => 'draft2020-12'; | ||||
27 | } | ||||
28 | |||||
29 | 3 | 3µs | # spent 1µs within JSON::Schema::Modern::Vocabulary::Content::evaluation_order which was called 3 times, avg 333ns/call:
# 3 times (1µs+0s) by JSON::Schema::Modern::Vocabulary::Core::CORE:sort at line 331 of JSON/Schema/Modern/Vocabulary/Core.pm, avg 333ns/call | ||
30 | |||||
31 | 6 | 1µs | # spent 5µs within JSON::Schema::Modern::Vocabulary::Content::keywords which was called 2 times, avg 2µs/call:
# once (4µs+0s) by JSON::Schema::Modern::_traverse_subschema at line 475 of JSON/Schema/Modern.pm
# once (1µs+0s) by JSON::Schema::Modern::_eval_subschema at line 563 of JSON/Schema/Modern.pm | ||
32 | return ( | ||||
33 | 2 | 5µs | qw(contentEncoding contentMediaType), | ||
34 | $spec_version ne 'draft7' ? 'contentSchema' : (), | ||||
35 | ); | ||||
36 | } | ||||
37 | |||||
38 | 4 | 0s | # spent 12µs (5+7) within JSON::Schema::Modern::Vocabulary::Content::_traverse_keyword_contentEncoding which was called:
# once (5µs+7µs) by JSON::Schema::Modern::Vocabulary::Content::_traverse_keyword_contentMediaType at line 66 | ||
39 | 1 | 2µs | 1 | 7µs | return if not assert_keyword_type($state, $schema, 'string'); # spent 7µs making 1 call to JSON::Schema::Modern::Utilities::assert_keyword_type |
40 | 1 | 3µs | return 1; | ||
41 | } | ||||
42 | |||||
43 | sub _eval_keyword_contentEncoding ($self, $data, $schema, $state) { | ||||
44 | return 1 if not is_type('string', $data); | ||||
45 | |||||
46 | A($state, $schema->{$state->{keyword}}); | ||||
47 | |||||
48 | if ($state->{validate_content_schemas}) { | ||||
49 | my $decoder = $state->{evaluator}->get_encoding($schema->{contentEncoding}); | ||||
50 | abort($state, 'cannot find decoder for contentEncoding "%s"', $schema->{contentEncoding}) | ||||
51 | if not $decoder; | ||||
52 | |||||
53 | # decode the data now, so we can report errors for the right keyword | ||||
54 | try { | ||||
55 | $state->{_content_ref} = $decoder->(\$data); | ||||
56 | } | ||||
57 | catch ($e) { | ||||
58 | chomp $e; | ||||
59 | return E($state, 'could not decode %s string: %s', $schema->{contentEncoding}, $e); | ||||
60 | }; | ||||
61 | } | ||||
62 | |||||
63 | return 1; | ||||
64 | } | ||||
65 | |||||
66 | 1 | 36µs | 1 | 12µs | # spent 63µs (51+12) within JSON::Schema::Modern::Vocabulary::Content::_traverse_keyword_contentMediaType which was called:
# once (51µs+12µs) by JSON::Schema::Modern::_traverse_subschema at line 487 of JSON/Schema/Modern.pm # spent 12µs making 1 call to JSON::Schema::Modern::Vocabulary::Content::_traverse_keyword_contentEncoding |
67 | |||||
68 | sub _eval_keyword_contentMediaType ($self, $data, $schema, $state) { | ||||
69 | return 1 if not is_type('string', $data); | ||||
70 | |||||
71 | A($state, $schema->{$state->{keyword}}); | ||||
72 | |||||
73 | if ($state->{validate_content_schemas}) { | ||||
74 | my $decoder = $state->{evaluator}->get_media_type($schema->{contentMediaType}); | ||||
75 | abort($state, 'cannot find decoder for contentMediaType "%s"', $schema->{contentMediaType}) | ||||
76 | if not $decoder; | ||||
77 | |||||
78 | # contentEncoding failed to decode the content | ||||
79 | return 1 if exists $schema->{contentEncoding} and not exists $state->{_content_ref}; | ||||
80 | |||||
81 | # decode the data now, so we can report errors for the right keyword | ||||
82 | try { | ||||
83 | $state->{_content_ref} = $decoder->($state->{_content_ref} // \$data); | ||||
84 | } | ||||
85 | catch ($e) { | ||||
86 | chomp $e; | ||||
87 | delete $state->{_content_ref}; | ||||
88 | return E($state, 'could not decode %s string: %s', $schema->{contentMediaType}, $e); | ||||
89 | } | ||||
90 | } | ||||
91 | |||||
92 | return 1; | ||||
93 | } | ||||
94 | |||||
95 | 4 | 6µs | # spent 92µs (20+72) within JSON::Schema::Modern::Vocabulary::Content::_traverse_keyword_contentSchema which was called:
# once (20µs+72µs) by JSON::Schema::Modern::_traverse_subschema at line 487 of JSON/Schema/Modern.pm | ||
96 | # since contentSchema should never be assumed to be evaluated in the context of the containing | ||||
97 | # schema, it is not appropriate to gather identifiers found therein -- but we can still validate | ||||
98 | # the subschema. | ||||
99 | 1 | 10µs | 1 | 72µs | $self->traverse_subschema($schema, +{ %$state, identifiers => [] }); # spent 72µs making 1 call to JSON::Schema::Modern::Vocabulary::traverse_subschema |
100 | } | ||||
101 | |||||
102 | sub _eval_keyword_contentSchema ($self, $data, $schema, $state) { | ||||
103 | return 1 if not exists $schema->{contentMediaType}; | ||||
104 | return 1 if not is_type('string', $data); | ||||
105 | |||||
106 | A($state, dclone($schema->{contentSchema})); | ||||
107 | return 1 if not $state->{validate_content_schemas}; | ||||
108 | |||||
109 | return 1 if not exists $state->{_content_ref}; # contentMediaType failed to decode the content | ||||
110 | |||||
111 | return 1 if $self->eval($state->{_content_ref}->$*, $schema->{contentSchema}, | ||||
112 | { %$state, schema_path => $state->{schema_path}.'/contentSchema' }); | ||||
113 | return E($state, 'subschema is not valid'); | ||||
114 | } | ||||
115 | |||||
116 | 1 | 5µs | 1; | ||
117 | |||||
118 | 1 | 45µs | 1 | 229µs | __END__ # spent 229µs making 1 call to B::Hooks::EndOfScope::XS::__ANON__[B/Hooks/EndOfScope/XS.pm:26] |