alef 0.23.15

Opinionated polyglot binding generator for Rust libraries
Documentation
#[derive(serde::Deserialize, Default)]
#[serde(default)]
pub struct {{ input_name }} {
{%- for field in fields %}
{%- if field.cfg %}
    #[cfg({{ field.cfg }})]
{%- endif %}
{%- if field.is_skipped %}
    #[serde(skip)]
{%- else %}
    #[serde(rename = "{{ field.serde_rename }}")]
{%- endif %}
    pub {{ field.name }}: {{ field.ty }},
{%- endfor %}
}

impl From<{{ input_name }}> for {{ core_path }} {
    fn from(val: {{ input_name }}) -> Self {
{%- if has_default %}
        let mut out = Self::default();
{%- for field in fields %}
{%- if field.cfg %}
        #[cfg({{ field.cfg }})]
{%- endif %}
        if let Some(v) = val.{{ field.name }} {
            out.{{ field.core_name }} = {{ field.conv }};
        }
{%- endfor %}
        out
{%- else %}
        Self {
{%- for field in fields %}
{%- if field.cfg %}
            #[cfg({{ field.cfg }})]
{%- endif %}
            {{ field.core_name }}: val.{{ field.name }}.map(|v| {{ field.conv }}).unwrap_or_default(),
{%- endfor %}
        }
{%- endif %}
    }
}