// Generated from {{template_path}} template. Edit the template, not the generated file. {% set components = ["x", "y", "z", "w"] %} {% set dimensions = [2, 3, 4] %} {% for dim in dimensions %} {% set vec2_t = "Self::Vec2" %} {% set vec3_t = "Self::Vec3" %} {% set vec4_t = "Self::Vec4" %} {% if dim == 4 %} {% set vec4_t = "Self" %} {% elif dim == 3 %} {% set vec3_t = "Self" %} {% elif dim == 2 %} {% set vec2_t = "Self" %} {% endif %} pub trait Vec{{ dim }}Swizzles: Sized + Copy + Clone { {% if dim != 2 %} type Vec2; {% endif %} {% if dim != 3 %} type Vec3; {% endif %} {% if dim != 4 %} type Vec4; {% endif %} {% if dim == 4 %} #[inline] #[must_use] fn xyzw(self) -> Self { self } {% elif dim == 3 %} #[inline] #[must_use] fn xyz(self) -> Self { self } {% elif dim == 2 %} #[inline] #[must_use] fn xy(self) -> Self { self } {% endif %} {% for i in dimensions %} {% for e0 in components | slice(end=dim) %} {% for e1 in components | slice(end=dim) %} {% if i == 2 %} {% set skip = dim == 2 and e0 == "x" and e1 == "y" %} {% if not skip %} #[must_use] fn {{e0}}{{e1}}(self) -> {{ vec2_t }}; {% endif %} {% set skip = dim == 2 or e0 == e1 %} {% if not skip %} #[must_use] fn with_{{e0}}{{e1}}(self, rhs: {{ vec2_t }}) -> Self; {% endif %} {% else %} {% for e2 in components | slice(end=dim) %} {% if i == 3 %} {% set skip = dim == 3 and e0 == "x" and e1 == "y" and e2 == "z" %} {% if not skip %} #[must_use] fn {{e0}}{{e1}}{{e2}}(self) -> {{ vec3_t }}; {% endif %} {% set skip = dim == 3 or e0 == e1 or e0 == e2 or e1 == e2 %} {% if not skip %} #[must_use] fn with_{{e0}}{{e1}}{{e2}}(self, rhs: {{ vec3_t }}) -> Self; {% endif %} {% else %} {% for e3 in components | slice(end=dim) %} {% set skip = dim == 4 and e0 == "x" and e1 == "y" and e2 == "z" and e3 == "w" %} {% if not skip %} #[must_use] fn {{e0}}{{e1}}{{e2}}{{e3}}(self) -> {{ vec4_t }}; {% endif %} {% endfor %} {% endif %} {% endfor %} {% endif %} {% endfor %} {% endfor %} {% endfor %} } {% endfor %}