Skip to content

Commit

Permalink
Fixes optional Enum generation
Browse files Browse the repository at this point in the history
  • Loading branch information
dysonreturns committed Feb 4, 2025
1 parent ae8178c commit 9dd400e
Show file tree
Hide file tree
Showing 2 changed files with 135 additions and 29 deletions.
18 changes: 12 additions & 6 deletions lib/protoboeuf/codegen.rb
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,6 @@ def initialize(message, toplevel_enums, generate_types:, requires:, syntax:, opt
if optional_field?(field)
if field.type == :TYPE_ENUM
@enum_fields << field
@optional_fields << field
end
@optional_fields << field
@optional_field_bit_lut[field.number] = optional_field_count
Expand Down Expand Up @@ -691,10 +690,11 @@ def required_readers
end

def optional_readers
return "" if optional_fields.empty?
fields = optional_fields.reject { |field| field.type == :TYPE_ENUM }
return "" if fields.empty?

"# optional field readers\n" +
optional_fields.map do |field|
fields.map do |field|
"#{reader_type_signature(field)}\nattr_reader :#{field.name}\n"
end.join("\n") +
"\n\n"
Expand Down Expand Up @@ -729,7 +729,12 @@ def enum_writers

"# enum writers\n" +
fields.map do |field|
"def #{field.name}=(v); #{iv_name(field)} = #{enum_name(field)}.resolve(v) || v; end"
writer = "def #{field.name}=(v); #{iv_name(field)} = #{enum_name(field)}.resolve(v) || v;"
if @optional_fields.include?(fields)
writer << "#{set_bitmask(field)}; "
end
writer << "end"
writer
end.join("\n") + "\n\n"
end

Expand All @@ -750,10 +755,11 @@ def #{field.name}=(v)
end

def optional_writers
return "" if optional_fields.empty?
fields = optional_fields.reject { |field| field.type == :TYPE_ENUM }
return "" if fields.empty?

"# BEGIN writers for optional fields\n" +
optional_fields.map { |field|
fields.map { |field|
<<~RUBY
#{type_signature(params: { v: convert_field_type(field) })}
def #{field.name}=(v)
Expand Down
Loading

0 comments on commit 9dd400e

Please sign in to comment.