class Ecu::Festwert

def bytesize

def bytesize
  BYTESIZE[:number]
end

def equality_properties

def equality_properties
  [:name, :value]
end

def initialize(name:,

def initialize(name:,
               value:,
               unit: nil,
               function: nil,
               description: nil)
  @name        = name
  @value       = value.is_a?(Array) ? value.first : value
  @unit        = unit
  @function    = function
  @description = description
end

def properties

def properties
  [:name, :value, :unit, :function, :description]
end

def round_to(n)

def round_to(n)
  return self unless value.is_a?(Numeric)
  self.with \
    value: value.round(n)
end

def to_dcm(indented=false)

def to_dcm(indented=false)
  fmtstr = indented ? "%-25s%s\n" : "%s %s\n"
  sprintf(fmtstr, type.upcase, name).tap do |str|
    str << "  LANGNAME #{description.enquote}\n" if description
    str << "  FUNKTION #{function}\n"            if function
    str << "  EINHEIT_W #{unit.enquote}\n"       if unit
    str << case value
           when Numeric then "  WERT #{value}\n"
           when String  then "  TEXT #{value.enquote}\n"
           end
    str << "END\n"
  end
end

def to_mfile

def to_mfile
  case value
  when Numeric then "#{name} = #{value};\n"
  when String  then "#{name} = '#{value}';\n"
  end
end

def to_s(detail: false)

def to_s(detail: false)
  if detail == :justvalue
    value.to_s
  elsif detail == :value
    "#{name}: #{value}"
  elsif detail == :onelinefull
    "#{name}: #{to_s(detail: :oneline)}"
  elsif detail == :oneline
    "#{value}"
  elsif detail
    <<~EOS
    #{name}: #{type}
      Value: #{value}
      Unit: "#{unit}"
    EOS
  else
    "#{name}: #{type}"
  end
end