|
| 1 | +# frozen_string_literal: true |
| 2 | +# This file is @generated |
| 3 | +{% set class_ty = type.name | to_upper_camel_case -%} |
| 4 | +require 'json' |
| 5 | + |
| 6 | +module Svix |
| 7 | + {% if type.description is defined -%} |
| 8 | + {{ type.description | to_doc_comment(style="ruby") | indent(4) }} |
| 9 | + {% endif -%} |
| 10 | + class {{ class_ty }} |
| 11 | + {% for field in type.fields -%} |
| 12 | + attr_accessor :{{ field.name | to_snake_case }} |
| 13 | + {% endfor %} |
| 14 | + ALL_FIELD ||= [ |
| 15 | + {%- for f in type.fields -%} |
| 16 | + "{{ f.name | to_snake_case }}"{% if not loop.last %},{% endif %} |
| 17 | + {%- endfor -%} |
| 18 | + ].freeze |
| 19 | + private_constant :ALL_FIELD |
| 20 | + |
| 21 | + def initialize(attributes = {}) |
| 22 | + unless attributes.is_a?(Hash) |
| 23 | + fail ArgumentError, "The input argument (attributes) must be a hash in `Svix::{{ class_ty }}` new method" |
| 24 | + end |
| 25 | + attributes.each do |k, v| |
| 26 | + unless ALL_FIELD.include? k.to_s |
| 27 | + fail ArgumentError, "The field #{k} is not part of Svix::{{ class_ty }}" |
| 28 | + end |
| 29 | + instance_variable_set("@#{k}", v) |
| 30 | + instance_variable_set("@__#{k}_is_defined", true) |
| 31 | + end |
| 32 | + end |
| 33 | + |
| 34 | + def self.deserialize(attributes = {}) |
| 35 | + attributes = attributes.transform_keys(&:to_s) |
| 36 | + attrs = Hash.new |
| 37 | + {% for field in type.fields -%} |
| 38 | + {% set val_expr %}attributes['{{ field.name }}']{% endset -%} |
| 39 | + {% set not_nil_check = "" -%} |
| 40 | + {% if not field.required -%} |
| 41 | + {% set not_nil_check %}if {{ val_expr }}{% endset -%} |
| 42 | + {% endif -%} |
| 43 | + |
| 44 | + {% if (field.type.is_set() or field.type.is_list()) and field.type.inner_type().is_schema_ref() -%} |
| 45 | + {% set val_expr -%} |
| 46 | + attributes['{{ field.name }}'].map { | v | Svix::{{ field.type.inner_type().to_ruby() }}.deserialize v } {{ not_nil_check }} |
| 47 | + {%- endset -%} |
| 48 | + {% elif field.type.is_schema_ref() -%} |
| 49 | + {% set val_expr -%} |
| 50 | + Svix::{{ field.type.to_ruby() }}.deserialize(attributes['{{ field.name }}']) {{ not_nil_check }} |
| 51 | + {%- endset -%} |
| 52 | + {% elif field.type.is_datetime() -%} |
| 53 | + {% set val_expr %}DateTime.rfc3339({{ val_expr }}).to_time {{ not_nil_check }}{% endset -%} |
| 54 | + {% endif -%} |
| 55 | + attrs['{{ field.name | to_snake_case }}'] = {{ val_expr }} |
| 56 | + {% endfor -%} |
| 57 | + new attrs |
| 58 | + end |
| 59 | + |
| 60 | + def serialize |
| 61 | + out = Hash.new |
| 62 | + {% for field in type.fields -%} |
| 63 | + {% set val_expr %}@{{ field.name | to_snake_case }}{% endset -%} |
| 64 | + |
| 65 | + {% if (field.type.is_set() or field.type.is_list()) and field.type.inner_type().is_schema_ref() -%} |
| 66 | + {% set val_expr %}{{ val_expr }}.map { | v | v.serialize }{% endset -%} |
| 67 | + {% elif field.type.is_schema_ref() -%} |
| 68 | + {% set val_expr %}{{ val_expr }}.serialize{% endset -%} |
| 69 | + {% else -%} |
| 70 | + {% set val_expr %}Svix::serialize_primitive({{ val_expr }}){% endset -%} |
| 71 | + {% endif -%} |
| 72 | + {% if type.name is endingwith "Patch" and field.nullable -%} |
| 73 | + out['{{ field.name }}'] = {{ val_expr }} if @__{{ field.name | to_snake_case }}_is_defined |
| 74 | + {% else -%} |
| 75 | + out['{{ field.name }}'] = {{ val_expr }} if @{{ field.name | to_snake_case }} |
| 76 | + {% endif -%} |
| 77 | + {% endfor -%} |
| 78 | + out |
| 79 | + end |
| 80 | + |
| 81 | + # Serializes the object to a json string |
| 82 | + # @return String |
| 83 | + def to_json |
| 84 | + JSON.dump(serialize) |
| 85 | + end |
| 86 | + end |
| 87 | +end |
0 commit comments