{
{%- if let Some(display_fmt) = trait_methods.display_fmt %}
# The Rust `Display::fmt` implementation.
def to_s
result = ::{{ ci.namespace()|class_name_rb }}.rust_call(
:{{ display_fmt.ffi_func().name() }},
{{ display_fmt|lower_method_self_rb(config) }}
)
{{ "result"|lift_rb(display_fmt.return_type().unwrap(), config) }}
end
{%- endif %}
{%- if let Some(debug_fmt) = trait_methods.debug_fmt %}
def inspect
result = ::{{ ci.namespace()|class_name_rb }}.rust_call(
:{{ debug_fmt.ffi_func().name() }},
{{ debug_fmt|lower_method_self_rb(config) }}
)
{{ "result"|lift_rb(debug_fmt.return_type().unwrap(), config) }}
end
{%- endif %}
{%- if let Some(eq) = trait_methods.eq_eq %}
# The Rust `Eq::eq` implementation.
def ==(other)
return false unless other.is_a?(self.class)
result = ::{{ ci.namespace()|class_name_rb }}.rust_call(
:{{ eq.ffi_func().name() }},
{{ eq|lower_method_self_rb(config) }},
{{ "other"|lower_rb(eq.arguments()[0].as_type().borrow(), config) }}
)
{{ "result"|lift_rb(eq.return_type().unwrap(), config) }}
end
{%- endif %}
{%- if let Some(hash) = trait_methods.hash_hash %}
# The Rust `Hash::hash` implementation.
def hash
result = ::{{ ci.namespace()|class_name_rb }}.rust_call(
:{{ hash.ffi_func().name() }},
{{ hash|lower_method_self_rb(config) }}
)
{{ "result"|lift_rb(hash.return_type().unwrap(), config) }}
end
def eql?(other)
self == other
end
{%- endif %}
{%- if let Some(cmp) = trait_methods.ord_cmp %}
# The Rust `Ord::cmp` implementation.
include Comparable
def <=>(other)
# do we need this?
# return nil unless other.is_a?(self.class)
result = ::{{ ci.namespace()|class_name_rb }}.rust_call(
:{{ cmp.ffi_func().name() }},
{{ cmp|lower_method_self_rb(config) }},
{{ "other"|lower_rb(cmp.arguments()[0].as_type().borrow(), config) }}
)
{{ "result"|lift_rb(cmp.return_type().unwrap(), config) }}
rescue
nil
end
{%- endif %}