<%
def make_items_type(items)
case items[:type]
when "integer" then
"number"
when "object" then
items[:ref].ucc
when "float" then
"number"
when "date" then
"string"
else
"string"
end
end
def make_response_type(key, value)
res = case value[:type]
when "integer" then
"number"
when "float" then
"number"
when "array" then
"#{make_items_type(value[:items])}[]"
when "date" then
"string"
when "bool" then
"boolean"
when "json" then
"any"
when "object" then
if value[:ref].present?
value[:ref].ucc
else
@inner_map[key] = value
key.to_s.ucc
end
when "enum_single" then
value[:value].split(/, ?/).map{|it| "\"#{it}\""}.join(' | ')
else
"string"
end
if value[:required] == true
res
else
"#{res} | undefined"
end
end
extra_list = []
properties.each_pair do |key, value|
if value[:type] == "object"
if value[:required] == true
extra_list << "self.#{key}.is_empty_extra()"
else
extra_list << "self.#{key}.as_ref().map(|it| it.is_empty_extra()).unwrap_or(true)"
end
elsif value[:type] == "array" && value[:items][:type] == "object"
if value[:required] == true
extra_list << "self.#{key}.iter().all(|it| it.is_empty_extra())"
else
extra_list << "self.#{key}.as_ref().map(|it| it.iter().all(|item| item.is_empty_extra())).unwrap_or(true)"
end
end
end
extra_value = extra_list.present? ? " &&\n #{extra_list.join(" &&\n ")}" : ""
%><% refs.each do | ref | %>import { <%= ref.ucc %> } from "./<%= ref %>";
<% end %>
export interface <%= class_name %> {<% properties.each_pair do |key, value| %>
<%= key.to_s.lcc %>: <%= make_response_type(key, value) %>;<% end %>
}