<%- package "model" -%> <%- source_file.types.each do |type| -%> <%- if !type.fields.empty? -%> <%- type.field_type_packages.each do |pkg| import(PACKAGE_FOR_IMPORT[pkg] || pkg) end -%> type <%= type.name %> struct { <%- if type.goon -%> <%= type.id_definition %> <%- if type.parent -%> <%- import "google.golang.org/appengine/datastore" -%> ParentKey *datastore.Key `datastore:"-" goon:"parent" json:"-"` <%- end -%> <%- end -%> <%- type.fields.each do |field| -%> <%= field.definition %> <%- end -%> } <%- elsif type.base -%> type <%= type.name %> <%= type.base %> <%- if type.enum_items -%> const ( <%- type.enum_items.each do |item| -%> <%= item.camelize %> <%= type.name %> = <%= item.inspect %> <%- end -%> ) <%- end -%> <%- if type.enum_map -%> const ( <%- type.enum_map.each do |key, name| -%> <%= type.name %><%= name.camelize %> <%= type.name %> = <%= key.inspect %> <%- end -%> ) var <%= type.name %>Map = map[<%= type.name %>]string{ <%- type.enum_map.each do |key, name| -%> <%= key.inspect %>: <%= name.inspect %>, <%- end -%> } func (t <%= type.name %>) String() string { return <%= type.name %>Map[t] } var <%= type.name %>NameToValue = map[string]<%= type.name %>{ <%- type.enum_map.each do |key, name| -%> <%= name.inspect %>: <%= key.inspect %>, <%- end -%> } func Parse<%= type.name %>(s string) *<%= type.name %> { val, ok := <%= type.name %>NameToValue[s] if ok { return &val } else { return nil } } <%- end -%> <%- end -%> <%- end -%> <%- source_file.types.select(&:store?).each do |model| -%> func (m *<%= model.name %>) PrepareToCreate() error { <%- if model.fields.any?{|f| f.name == "CreatedAt"} -%> if m.CreatedAt.IsZero() { m.CreatedAt = time.Now() } <%- end -%> <%- if model.fields.any?{|f| f.name == "UpdatedAt"} -%> if m.UpdatedAt.IsZero() { m.UpdatedAt = time.Now() } <%- end -%> return nil } func (m *<%= model.name %>) PrepareToUpdate() error { <%- if model.fields.any?{|f| f.name == "UpdatedAt"} -%> m.UpdatedAt = time.Now() <%- end -%> return nil } func (m *<%= model.name %>) IsPersisted() bool { return m.ID != <%= model.id_field.zero_value_expression %> } <%- if model.parent -%> <%- import "context" -%> func (m *<%= model.name %>) Parent(ctx context.Context) (*<%= model.parent %>, error) { parentStore := &<%= model.parent %>Store{} return parentStore.ByKey(ctx, m.ParentKey) } <%- end -%> <%- end -%>