
{% if td.clz_description %}/// {{td.clz_description}}{% endif %}
#[derive(Debug, Clone)]
pub struct {{tgype.typen}} {
  {% for field in td.fields %}{% if field.name != 'td_name' %}{% if field.description %}/// {{field.description}}{% endif %}
  {{field.name}}: {{field.class}},
  {% endif %}{% endfor %}
}

impl TDFB for TG{{td.clz_name}} {}

impl AsRef<{{tgype.typen}}> for {{tgype.typen}} {
  fn as_ref(&self) -> &{{tgype.typen}} { self }
}

impl {{tgype.typen}} {
  pub fn new() -> Self {
    Self {
      {% for field in td.fields %}{% if field.name != 'td_name' %}{{field.name}}: None,
      {% endif %}{% endfor %}
    }
  }

  #[doc(hidden)]
  pub fn build(&self) -> {{td.clz_name}} {
    {{td.clz_name}}::builder()
      {% for field in td.fields %}{% if field.name != 'td_name' %}.{{field.name}}(self.{{field.name}}.clone())
      {% endif %}{% endfor %}
      .build()
  }

  {% for field in td.fields %}{% if field.name != 'td_name' %}
  pub fn {{field.name}}{% if field.class_real == 'String' %}<S: AsRef<str>>{% endif %}(&mut self, {{field.name}}: {% if field.class_real == 'String' %}S{% else %}{{field.class_real}}{% endif %}) -> &mut Self {
    self.{{field.name}} = Some({% if field.class_real == 'String' %}{{field.name}}.as_ref().to_string(){% else %}{{field.name}}{% endif %});
    self
  }
  {% endif %}{% endfor %}

}
