avromatic 2.2.2 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.circleci/config.yml +85 -0
- data/.rubocop.yml +3 -0
- data/.ruby-version +1 -1
- data/Appraisals +34 -22
- data/CHANGELOG.md +16 -0
- data/README.md +3 -3
- data/avromatic.gemspec +7 -6
- data/bin/console +4 -3
- data/gemfiles/{rails5_0.gemfile → avro1_10_rails5_2.gemfile} +3 -3
- data/gemfiles/avro1_10_rails6_0.gemfile +9 -0
- data/gemfiles/avro1_10_rails6_1.gemfile +9 -0
- data/gemfiles/{rails5_2.gemfile → avro1_8_rails5_2.gemfile} +0 -0
- data/gemfiles/{rails5_1.gemfile → avro1_9_rails5_2.gemfile} +3 -3
- data/gemfiles/{rails6_0.gemfile → avro1_9_rails6_0.gemfile} +1 -1
- data/gemfiles/{avro_patches_rails5_0.gemfile → avro1_9_rails6_1.gemfile} +3 -3
- data/gemfiles/avro_patches_rails5_2.gemfile +1 -1
- data/gemfiles/avro_patches_rails6_1.gemfile +9 -0
- data/lib/avromatic.rb +0 -5
- data/lib/avromatic/io.rb +1 -7
- data/lib/avromatic/io/datum_reader.rb +18 -68
- data/lib/avromatic/io/datum_writer.rb +5 -11
- data/lib/avromatic/io/union_datum.rb +25 -0
- data/lib/avromatic/messaging.rb +4 -2
- data/lib/avromatic/model/attributes.rb +6 -6
- data/lib/avromatic/model/configurable.rb +24 -0
- data/lib/avromatic/model/messaging_serialization.rb +2 -1
- data/lib/avromatic/model/raw_serialization.rb +14 -11
- data/lib/avromatic/model/types/abstract_timestamp_type.rb +1 -1
- data/lib/avromatic/model/types/abstract_type.rb +3 -1
- data/lib/avromatic/model/types/array_type.rb +2 -2
- data/lib/avromatic/model/types/boolean_type.rb +1 -1
- data/lib/avromatic/model/types/custom_type.rb +1 -1
- data/lib/avromatic/model/types/date_type.rb +1 -1
- data/lib/avromatic/model/types/enum_type.rb +1 -1
- data/lib/avromatic/model/types/fixed_type.rb +1 -1
- data/lib/avromatic/model/types/float_type.rb +1 -1
- data/lib/avromatic/model/types/integer_type.rb +1 -1
- data/lib/avromatic/model/types/map_type.rb +2 -2
- data/lib/avromatic/model/types/null_type.rb +1 -1
- data/lib/avromatic/model/types/record_type.rb +1 -5
- data/lib/avromatic/model/types/string_type.rb +1 -1
- data/lib/avromatic/model/types/timestamp_micros_type.rb +4 -4
- data/lib/avromatic/model/types/timestamp_millis_type.rb +4 -4
- data/lib/avromatic/model/types/union_type.rb +11 -8
- data/lib/avromatic/version.rb +1 -1
- metadata +62 -47
- data/.travis.yml +0 -23
- data/gemfiles/avro_patches_rails5_1.gemfile +0 -9
- data/lib/avromatic/patches.rb +0 -18
- data/lib/avromatic/patches/schema_validator_patch.rb +0 -39
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e695eda252fc8374491c000581104f96383a397a118097e9b9c87b256823b267
|
|
4
|
+
data.tar.gz: 792f85d1fde7b223491265ff9a82024373063aeb942daa8818510e4fdbfb4d65
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e0fbee30489961e56e3ce6a7026beb7e687a38de373c72fd0cc6c39a0afa02ef1618f2c730e4647a3339059591ad2252744a0f1a760a1f5282dafeb0cfd93ff8
|
|
7
|
+
data.tar.gz: ef315a61ba34cefec8508a20d64eb6eb4fe530837c9ade67ac8a6075e146c3516a9dbc0a9cfc34ec71265b333865f93a4d36c588d9c9703f80b5a455e1bad408
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
version: 2.1
|
|
2
|
+
jobs:
|
|
3
|
+
lint:
|
|
4
|
+
docker:
|
|
5
|
+
- image: salsify/ruby_ci:2.5.8
|
|
6
|
+
working_directory: ~/avromatic
|
|
7
|
+
steps:
|
|
8
|
+
- checkout
|
|
9
|
+
- restore_cache:
|
|
10
|
+
keys:
|
|
11
|
+
- v2-gems-ruby-2.5.8-{{ checksum "avromatic.gemspec" }}-{{ checksum "Gemfile" }}
|
|
12
|
+
- v2-gems-ruby-2.5.8-
|
|
13
|
+
- run:
|
|
14
|
+
name: Install Gems
|
|
15
|
+
command: |
|
|
16
|
+
if ! bundle check --path=vendor/bundle; then
|
|
17
|
+
bundle install --path=vendor/bundle --jobs=4 --retry=3
|
|
18
|
+
bundle clean
|
|
19
|
+
fi
|
|
20
|
+
- save_cache:
|
|
21
|
+
key: v2-gems-ruby-2.5.8-{{ checksum "avromatic.gemspec" }}-{{ checksum "Gemfile" }}
|
|
22
|
+
paths:
|
|
23
|
+
- "vendor/bundle"
|
|
24
|
+
- "gemfiles/vendor/bundle"
|
|
25
|
+
- run:
|
|
26
|
+
name: Run Rubocop
|
|
27
|
+
command: bundle exec rubocop
|
|
28
|
+
test:
|
|
29
|
+
parameters:
|
|
30
|
+
gemfile:
|
|
31
|
+
type: string
|
|
32
|
+
ruby-version:
|
|
33
|
+
type: string
|
|
34
|
+
docker:
|
|
35
|
+
- image: salsify/ruby_ci:<< parameters.ruby-version >>
|
|
36
|
+
environment:
|
|
37
|
+
CIRCLE_TEST_REPORTS: "test-results"
|
|
38
|
+
BUNDLE_GEMFILE: << parameters.gemfile >>
|
|
39
|
+
working_directory: ~/avromatic
|
|
40
|
+
steps:
|
|
41
|
+
- checkout
|
|
42
|
+
- restore_cache:
|
|
43
|
+
keys:
|
|
44
|
+
- v2-gems-ruby-<< parameters.ruby-version >>-{{ checksum "avromatic.gemspec" }}-{{ checksum "<< parameters.gemfile >>" }}
|
|
45
|
+
- v2-gems-ruby-<< parameters.ruby-version >>-
|
|
46
|
+
- run:
|
|
47
|
+
name: Install Gems
|
|
48
|
+
command: |
|
|
49
|
+
if ! bundle check --path=vendor/bundle; then
|
|
50
|
+
bundle install --path=vendor/bundle --jobs=4 --retry=3
|
|
51
|
+
bundle clean
|
|
52
|
+
fi
|
|
53
|
+
- save_cache:
|
|
54
|
+
key: v2-gems-ruby-<< parameters.ruby-version >>-{{ checksum "avromatic.gemspec" }}-{{ checksum "<< parameters.gemfile >>" }}
|
|
55
|
+
paths:
|
|
56
|
+
- "vendor/bundle"
|
|
57
|
+
- "gemfiles/vendor/bundle"
|
|
58
|
+
- run:
|
|
59
|
+
name: Run Tests
|
|
60
|
+
command: |
|
|
61
|
+
bundle exec rspec --format RspecJunitFormatter --out $CIRCLE_TEST_REPORTS/rspec/junit.xml --format progress spec
|
|
62
|
+
- store_test_results:
|
|
63
|
+
path: "test-results"
|
|
64
|
+
workflows:
|
|
65
|
+
build:
|
|
66
|
+
jobs:
|
|
67
|
+
- lint
|
|
68
|
+
- test:
|
|
69
|
+
matrix:
|
|
70
|
+
parameters:
|
|
71
|
+
gemfile:
|
|
72
|
+
- "gemfiles/avro1_8_rails5_2.gemfile"
|
|
73
|
+
- "gemfiles/avro1_9_rails5_2.gemfile"
|
|
74
|
+
- "gemfiles/avro1_10_rails5_2.gemfile"
|
|
75
|
+
- "gemfiles/avro1_9_rails6_0.gemfile"
|
|
76
|
+
- "gemfiles/avro1_10_rails6_0.gemfile"
|
|
77
|
+
- "gemfiles/avro_patches_rails5_2.gemfile"
|
|
78
|
+
- "gemfiles/avro_patches_rails6_0.gemfile"
|
|
79
|
+
- "gemfiles/avro1_10_rails6_1.gemfile"
|
|
80
|
+
- "gemfiles/avro1_9_rails6_1.gemfile"
|
|
81
|
+
- "gemfiles/avro_patches_rails6_1.gemfile"
|
|
82
|
+
ruby-version:
|
|
83
|
+
- "2.5.8"
|
|
84
|
+
- "2.6.6"
|
|
85
|
+
- "2.7.1"
|
data/.rubocop.yml
CHANGED
data/.ruby-version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
2.5.
|
|
1
|
+
2.5.8
|
data/Appraisals
CHANGED
|
@@ -1,43 +1,37 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
appraise '
|
|
3
|
+
appraise 'avro1_8-rails5_2' do
|
|
4
4
|
gem 'avro', '1.8.2'
|
|
5
|
-
gem 'activesupport', '~> 5.0
|
|
6
|
-
gem 'activemodel', '~> 5.0
|
|
5
|
+
gem 'activesupport', '~> 5.2.0'
|
|
6
|
+
gem 'activemodel', '~> 5.2.0'
|
|
7
7
|
end
|
|
8
8
|
|
|
9
|
-
appraise '
|
|
10
|
-
gem 'avro', '1.
|
|
11
|
-
gem 'activesupport', '~> 5.
|
|
12
|
-
gem 'activemodel', '~> 5.
|
|
9
|
+
appraise 'avro1_9-rails5_2' do
|
|
10
|
+
gem 'avro', '1.9.2'
|
|
11
|
+
gem 'activesupport', '~> 5.2.0'
|
|
12
|
+
gem 'activemodel', '~> 5.2.0'
|
|
13
13
|
end
|
|
14
14
|
|
|
15
|
-
appraise 'rails5_2' do
|
|
16
|
-
gem 'avro', '1.
|
|
15
|
+
appraise 'avro1_10-rails5_2' do
|
|
16
|
+
gem 'avro', '~> 1.10.0'
|
|
17
17
|
gem 'activesupport', '~> 5.2.0'
|
|
18
18
|
gem 'activemodel', '~> 5.2.0'
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
-
appraise 'rails6_0' do
|
|
22
|
-
gem 'avro', '1.9.
|
|
21
|
+
appraise 'avro1_9-rails6_0' do
|
|
22
|
+
gem 'avro', '1.9.2'
|
|
23
23
|
gem 'activesupport', '~> 6.0.0'
|
|
24
24
|
gem 'activemodel', '~> 6.0.0'
|
|
25
25
|
end
|
|
26
26
|
|
|
27
|
-
appraise '
|
|
28
|
-
gem 'avro
|
|
29
|
-
gem 'activesupport', '~>
|
|
30
|
-
gem 'activemodel', '~>
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
appraise 'avro-patches-rails5_1' do
|
|
34
|
-
gem 'avro-patches', '>= 0.4.1'
|
|
35
|
-
gem 'activesupport', '~> 5.1.4'
|
|
36
|
-
gem 'activemodel', '~> 5.1.4'
|
|
27
|
+
appraise 'avro1_10-rails6_0' do
|
|
28
|
+
gem 'avro', '~> 1.10.0'
|
|
29
|
+
gem 'activesupport', '~> 6.0.0'
|
|
30
|
+
gem 'activemodel', '~> 6.0.0'
|
|
37
31
|
end
|
|
38
32
|
|
|
39
33
|
appraise 'avro-patches-rails5_2' do
|
|
40
|
-
gem 'avro-patches', '>= 0.4.1'
|
|
34
|
+
gem 'avro-patches', '>= 0.4.1', '< 1.0'
|
|
41
35
|
gem 'activesupport', '~> 5.2.0'
|
|
42
36
|
gem 'activemodel', '~> 5.2.0'
|
|
43
37
|
end
|
|
@@ -47,3 +41,21 @@ appraise 'avro-patches-rails6_0' do
|
|
|
47
41
|
gem 'activesupport', '~> 6.0.0'
|
|
48
42
|
gem 'activemodel', '~> 6.0.0'
|
|
49
43
|
end
|
|
44
|
+
|
|
45
|
+
appraise 'avro1_9-rails6_1' do
|
|
46
|
+
gem 'avro', '1.9.2'
|
|
47
|
+
gem 'activesupport', '~> 6.1.0'
|
|
48
|
+
gem 'activemodel', '~> 6.1.0'
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
appraise 'avro1_10-rails6_1' do
|
|
52
|
+
gem 'avro', '~> 1.10.0'
|
|
53
|
+
gem 'activesupport', '~> 6.1.0'
|
|
54
|
+
gem 'activemodel', '~> 6.1.0'
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
appraise 'avro-patches-rails6_1' do
|
|
58
|
+
gem 'avro-patches', '>= 1.0.0'
|
|
59
|
+
gem 'activesupport', '~> 6.1.0'
|
|
60
|
+
gem 'activemodel', '~> 6.1.0'
|
|
61
|
+
end
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# avromatic changelog
|
|
2
2
|
|
|
3
|
+
## v2.3.0
|
|
4
|
+
- Add support for Rails 6.1.
|
|
5
|
+
- Optimize nested model serialization.
|
|
6
|
+
|
|
7
|
+
## v2.2.6
|
|
8
|
+
- Optimize memory usage when serializing models.
|
|
9
|
+
|
|
10
|
+
## v2.2.5
|
|
11
|
+
- Optimize memory usage when serializing, deserializing and instantiating models.
|
|
12
|
+
|
|
13
|
+
## v2.2.4
|
|
14
|
+
- Compatibility with Avro v1.10.x.
|
|
15
|
+
|
|
16
|
+
## v2.2.3
|
|
17
|
+
- Fix bug where method `#referenced_model_classes` was declared as private instead of public.
|
|
18
|
+
|
|
3
19
|
## v2.2.2
|
|
4
20
|
- Fix missing models in the model registry when in development by loading the nested models of eager loaded models.
|
|
5
21
|
- Fake schema registry support for stubbing URLs with usernames and passwords.
|
data/README.md
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# Avromatic
|
|
2
2
|
|
|
3
|
-
[][circleci]
|
|
4
4
|
[](https://badge.fury.io/rb/avromatic)
|
|
5
5
|
|
|
6
|
-
[
|
|
6
|
+
[circleci]: https://circleci.com/gh/salsify/avromatic
|
|
7
7
|
|
|
8
8
|
`Avromatic` generates Ruby models from [Avro](http://avro.apache.org/) schemas
|
|
9
9
|
and provides utilities to encode and decode them.
|
|
@@ -142,7 +142,7 @@ instance.eql?(MyModel.new(id: 123, name: 'Tesla Model 3', enabled: true)) # => t
|
|
|
142
142
|
instance.hash # => -1279155042741869898
|
|
143
143
|
|
|
144
144
|
# Retrieve a hash of the model's attributes via to_h, to_hash or attributes
|
|
145
|
-
instance
|
|
145
|
+
instance.to_h # => {:id=>123, :name=>"Tesla Model 3", :enabled=>true}
|
|
146
146
|
```
|
|
147
147
|
|
|
148
148
|
Or an `Avro::Schema` object can be specified directly:
|
data/avromatic.gemspec
CHANGED
|
@@ -22,22 +22,23 @@ Gem::Specification.new do |spec|
|
|
|
22
22
|
|
|
23
23
|
spec.required_ruby_version = '>= 2.4'
|
|
24
24
|
|
|
25
|
-
spec.add_runtime_dependency 'activemodel', '>= 5.0', '< 6.
|
|
26
|
-
spec.add_runtime_dependency 'activesupport', '>= 5.0', '< 6.
|
|
27
|
-
spec.add_runtime_dependency 'avro', '>= 1.7.7', '< 1.
|
|
25
|
+
spec.add_runtime_dependency 'activemodel', '>= 5.0', '< 6.2'
|
|
26
|
+
spec.add_runtime_dependency 'activesupport', '>= 5.0', '< 6.2'
|
|
27
|
+
spec.add_runtime_dependency 'avro', '>= 1.7.7', '< 1.11'
|
|
28
28
|
spec.add_runtime_dependency 'avro_schema_registry-client', '>= 0.3.0'
|
|
29
29
|
spec.add_runtime_dependency 'avro_turf'
|
|
30
30
|
spec.add_runtime_dependency 'ice_nine'
|
|
31
31
|
|
|
32
|
+
spec.add_development_dependency 'appraisal'
|
|
32
33
|
spec.add_development_dependency 'avro-builder', '>= 0.12.0'
|
|
33
34
|
spec.add_development_dependency 'bundler', '>= 1.11'
|
|
35
|
+
spec.add_development_dependency 'overcommit', '0.35.0'
|
|
34
36
|
spec.add_development_dependency 'rake', '~> 10.0'
|
|
35
37
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
|
38
|
+
spec.add_development_dependency 'rspec_junit_formatter'
|
|
39
|
+
spec.add_development_dependency 'salsify_rubocop', '~> 0.52.1.1'
|
|
36
40
|
spec.add_development_dependency 'simplecov'
|
|
37
41
|
spec.add_development_dependency 'webmock'
|
|
38
42
|
# For AvroSchemaRegistry::FakeServer
|
|
39
|
-
spec.add_development_dependency 'appraisal'
|
|
40
|
-
spec.add_development_dependency 'overcommit', '0.35.0'
|
|
41
|
-
spec.add_development_dependency 'salsify_rubocop', '~> 0.52.1.1'
|
|
42
43
|
spec.add_development_dependency 'sinatra'
|
|
43
44
|
end
|
data/bin/console
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
|
+
# frozen_string_literal: true
|
|
2
3
|
|
|
3
|
-
require
|
|
4
|
-
require
|
|
4
|
+
require 'bundler/setup'
|
|
5
|
+
require 'avromatic'
|
|
5
6
|
|
|
6
7
|
# You can add fixtures and/or initialization code here to make experimenting
|
|
7
8
|
# with your gem easier. You can also use a different console, if you like.
|
|
@@ -10,5 +11,5 @@ require "avromatic"
|
|
|
10
11
|
# require "pry"
|
|
11
12
|
# Pry.start
|
|
12
13
|
|
|
13
|
-
require
|
|
14
|
+
require 'irb'
|
|
14
15
|
IRB.start
|
|
File without changes
|
data/lib/avromatic.rb
CHANGED
|
@@ -8,7 +8,6 @@ require 'avromatic/model'
|
|
|
8
8
|
require 'avromatic/model_registry'
|
|
9
9
|
require 'avromatic/messaging'
|
|
10
10
|
require 'active_support/core_ext/string/inflections'
|
|
11
|
-
require 'avromatic/patches'
|
|
12
11
|
|
|
13
12
|
module Avromatic
|
|
14
13
|
class << self
|
|
@@ -33,10 +32,6 @@ module Avromatic
|
|
|
33
32
|
eager_load_models!
|
|
34
33
|
end
|
|
35
34
|
|
|
36
|
-
def self.use_encoding_providers?
|
|
37
|
-
use_custom_datum_writer && defined?(Avromatic::Patches::SchemaValidatorPatch)
|
|
38
|
-
end
|
|
39
|
-
|
|
40
35
|
def self.build_schema_registry
|
|
41
36
|
raise 'Avromatic must be configured with a registry_url' unless registry_url
|
|
42
37
|
if use_schema_fingerprint_lookup
|
data/lib/avromatic/io.rb
CHANGED
|
@@ -1,11 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
module Avromatic
|
|
4
|
-
module IO
|
|
5
|
-
UNION_MEMBER_INDEX = '__avromatic_member_index'
|
|
6
|
-
ENCODING_PROVIDER = '__avromatic_encoding_provider'
|
|
7
|
-
end
|
|
8
|
-
end
|
|
9
|
-
|
|
10
3
|
require 'avromatic/io/datum_reader'
|
|
11
4
|
require 'avromatic/io/datum_writer'
|
|
5
|
+
require 'avromatic/io/union_datum'
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
# rubocop:disable Style/WhenThen
|
|
4
3
|
module Avromatic
|
|
5
4
|
module IO
|
|
6
5
|
# Subclass DatumReader to include additional information about the union
|
|
@@ -8,81 +7,32 @@ module Avromatic
|
|
|
8
7
|
# branch 'salsify-master' with the tag 'v1.9.0.3'
|
|
9
8
|
class DatumReader < Avro::IO::DatumReader
|
|
10
9
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
def read_data(writers_schema, readers_schema, decoder, initial_record = nil)
|
|
14
|
-
# schema matching
|
|
15
|
-
unless self.class.match_schemas(writers_schema, readers_schema)
|
|
16
|
-
raise Avro::IO::SchemaMatchException.new(writers_schema, readers_schema)
|
|
17
|
-
end
|
|
18
|
-
|
|
10
|
+
def read_data(writers_schema, readers_schema, decoder)
|
|
19
11
|
# schema resolution: reader's schema is a union, writer's schema is not
|
|
20
|
-
|
|
21
|
-
rs_index = readers_schema.schemas.find_index do |s|
|
|
22
|
-
self.class.match_schemas(writers_schema, s)
|
|
23
|
-
end
|
|
12
|
+
return super unless writers_schema.type_sym != :union && readers_schema.type_sym == :union
|
|
24
13
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
# Avromatic does not treat the union of null and 1 other type as a union
|
|
28
|
-
{}
|
|
29
|
-
elsif optional
|
|
30
|
-
# Avromatic does not treat the null of an optional field as part of the union
|
|
31
|
-
{ UNION_MEMBER_INDEX => rs_index - 1 }
|
|
32
|
-
else
|
|
33
|
-
{ UNION_MEMBER_INDEX => rs_index }
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
return read_data(writers_schema, readers_schema.schemas[rs_index], decoder, union_info) if rs_index
|
|
37
|
-
raise Avro::IO::SchemaMatchException.new(writers_schema, readers_schema)
|
|
14
|
+
rs_index = readers_schema.schemas.find_index do |s|
|
|
15
|
+
self.class.match_schemas(writers_schema, s)
|
|
38
16
|
end
|
|
39
17
|
|
|
40
|
-
|
|
41
|
-
datum = case writers_schema.type_sym
|
|
42
|
-
when :null; decoder.read_null
|
|
43
|
-
when :boolean; decoder.read_boolean
|
|
44
|
-
when :string; decoder.read_string
|
|
45
|
-
when :int; decoder.read_int
|
|
46
|
-
when :long; decoder.read_long
|
|
47
|
-
when :float; decoder.read_float
|
|
48
|
-
when :double; decoder.read_double
|
|
49
|
-
when :bytes; decoder.read_bytes
|
|
50
|
-
when :fixed; read_fixed(writers_schema, readers_schema, decoder)
|
|
51
|
-
when :enum; read_enum(writers_schema, readers_schema, decoder)
|
|
52
|
-
when :array; read_array(writers_schema, readers_schema, decoder)
|
|
53
|
-
when :map; read_map(writers_schema, readers_schema, decoder)
|
|
54
|
-
when :union; read_union(writers_schema, readers_schema, decoder)
|
|
55
|
-
when :record, :error, :request; read_record(writers_schema, readers_schema, decoder, initial_record || {})
|
|
56
|
-
else
|
|
57
|
-
raise Avro::AvroError.new("Cannot read unknown schema type: #{writers_schema.type}")
|
|
58
|
-
end
|
|
18
|
+
raise Avro::IO::SchemaMatchException.new(writers_schema, readers_schema) unless rs_index
|
|
59
19
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
if readers_schema.respond_to?(:logical_type)
|
|
63
|
-
readers_schema.type_adapter.decode(datum)
|
|
64
|
-
else
|
|
65
|
-
datum
|
|
66
|
-
end
|
|
67
|
-
end
|
|
20
|
+
datum = read_data(writers_schema, readers_schema.schemas[rs_index], decoder)
|
|
21
|
+
optional = readers_schema.schemas.first.type_sym == :null
|
|
68
22
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
end
|
|
23
|
+
if readers_schema.schemas.size == 2 && optional
|
|
24
|
+
# Avromatic does not treat the union of null and 1 other type as a union
|
|
25
|
+
datum
|
|
26
|
+
elsif datum.nil?
|
|
27
|
+
# Avromatic does not treat the null of an optional field as part of the union
|
|
28
|
+
nil
|
|
29
|
+
else
|
|
30
|
+
# Avromatic does not treat the null of an optional field as part of the union so
|
|
31
|
+
# adjust the member index accordingly
|
|
32
|
+
member_index = optional ? rs_index - 1 : rs_index
|
|
33
|
+
Avromatic::IO::UnionDatum.new(member_index, datum)
|
|
81
34
|
end
|
|
82
|
-
|
|
83
|
-
read_record
|
|
84
35
|
end
|
|
85
36
|
end
|
|
86
37
|
end
|
|
87
38
|
end
|
|
88
|
-
# rubocop:enable Style/WhenThen
|