///|
// Represents a MEASURE_REPRESENTATION_ITEM entity.
// Example from MachineContactMedium.step:
//   MEASURE_REPRESENTATION_ITEM('density measure',POSITIVE_RATIO_MEASURE(7850.),#589)
pub(all) enum MeasureValueComponent {
  PositiveRatioMeasure(@units.PositiveRatioMeasure)
  Raw(String)
}

///|
pub struct MeasureRepresentationItem {
  name : String
  value_component : MeasureValueComponent
  unit_component : @step.Ref
}

///|
pub fn MeasureRepresentationItem::new(
  name : String,
  value_component : MeasureValueComponent,
  unit_component : @step.Ref,
) -> MeasureRepresentationItem {
  MeasureRepresentationItem::{ name, value_component, unit_component, }
}

///|
pub impl @step.Entity for MeasureRepresentationItem with fn to_step(self) {
  let unit_str = "#\{self.unit_component.id.value}"
  let value_str = match self.value_component {
    PositiveRatioMeasure(m) => @step.Entity::to_step(m)
    Raw(s) => s
  }
  "MEASURE_REPRESENTATION_ITEM(\{@step.step_str(self.name)},\{value_str},\{unit_str})"
}