Sha256: ff6b22d7b71740d04fcebffade13cc1926f7b966a5071ca35525f3e565fc3cd3

Contents?: true

Size: 1.01 KB

Versions: 7

Compression:

Stored size: 1.01 KB

Contents

module Avro
  module Builder
    module Types
      class UnionType < Type
        include Avro::Builder::Types::ComplexType
        include Avro::Builder::Types::ConfigurableType
        include Avro::Builder::Types::TypeReferencer

        NULL_TYPE = 'null'.freeze

        dsl_attribute :types do |*types|
          if !types.empty?
            @types = types.flatten.map { |type| create_builtin_or_lookup_named_type(type) }
          else
            @types
          end
        end

        # Unions are serialized as an array of types
        def serialize(referenced_state)
          types.map { |type| type.serialize(referenced_state) }
        end

        # serialized will be an array of types. If the array includes
        # :null then it is moved to the beginning of the array.
        def self.union_with_null(serialized)
          serialized.reject { |type| type.to_s == NULL_TYPE }.unshift(:null)
        end

        def validate!
          validate_required_attribute!(:types)
        end
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
avro-builder-0.10.0 lib/avro/builder/types/union_type.rb
avro-builder-0.9.0 lib/avro/builder/types/union_type.rb
avro-builder-0.8.0 lib/avro/builder/types/union_type.rb
avro-builder-0.7.0 lib/avro/builder/types/union_type.rb
avro-builder-0.6.0 lib/avro/builder/types/union_type.rb
avro-builder-0.5.0 lib/avro/builder/types/union_type.rb
avro-builder-0.4.0 lib/avro/builder/types/union_type.rb