Sha256: 66f213cf0782a804ff71aa5addd963138be4d3271c50206b545bce8862d0f753
Contents?: true
Size: 1.63 KB
Versions: 1
Compression:
Stored size: 1.63 KB
Contents
require 'avro-patches' module Avro class ResolutionCanonicalForm < SchemaNormalization DECIMAL_LOGICAL_TYPE = 'decimal'.freeze def self.to_resolution_form(schema) new.to_resolution_form(schema) end def to_resolution_form(schema) MultiJson.dump(normalize_schema(schema)) end private def normalize_schema(schema) if schema.type_sym == :bytes && schema.logical_type == DECIMAL_LOGICAL_TYPE add_logical_type(schema, type: schema.type) else super end end def normalize_field(field) extensions = {} extensions[:default] = field.default if field.default? if field.aliases && !field.aliases.empty? extensions[:aliases] = field.aliases.sort end super.merge(extensions) end def add_logical_type(schema, serialized) if schema.logical_type == DECIMAL_LOGICAL_TYPE extensions = { logicalType: DECIMAL_LOGICAL_TYPE } extensions[:precision] = schema.precision if schema.respond_to?(:precision) && schema.precision extensions[:scale] = schema.scale if schema.respond_to?(:scale) && schema.scale serialized.merge(extensions) else serialized end end def normalize_named_type(schema, attributes = {}) extensions = {} if schema.respond_to?(:default) # For enum defaults extensions[:default] = schema.default unless schema.default.nil? end aliases = schema.fullname_aliases extensions[:aliases] = aliases.sort unless aliases.empty? extensions = add_logical_type(schema, extensions) super.merge(extensions) end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
avro-resolution_canonical_form-0.3.0 | lib/avro/resolution_canonical_form.rb |