Printing for Custom Types ========================= {{#include ../links.md}} Provide These Functions ----------------------- To use [custom types] for [`print`] and [`debug`], or convert a [custom type] into a [string], it is necessary that the following functions, at minimum, be registered (assuming the [custom type] is `T: Display + Debug`). | Function | Signature | Typical implementation | Usage | | ----------- | ------------------------------------ | ---------------------- | ---------------------------------------------------------- | | `to_string` | \|x: &mut T\| -> String | `x.to_string()` | converts the [custom type] into a [string] | | `to_debug` | \|x: &mut T\| -> String | `format!("{x:?}")` | converts the [custom type] into a [string] in debug format | ~~~admonish tip.small "Tip: `#[rhai_fn(global)]`" If these functions are defined via a [plugin module], be sure to include the `#[rhai_fn(global)]` attribute in order to make them available globally. See [this section]({{rootUrl}}/plugins/module.md#use-rhai_fnglobal) for more details. ~~~ Also Consider These ------------------- The following functions are implemented using `to_string` or `to_debug` by default, but can be overloaded with custom versions. | Function | Signature | Default | Usage | | ------------- | ---------------------------------------------- | ----------- | ---------------------------------------------------------------------- | | `print` | \|x: &mut T\| -> String | `to_string` | converts the [custom type] into a [string] for the [`print`] statement | | `debug` | \|x: &mut T\| -> String | `to_debug` | converts the [custom type] into a [string] for the [`debug`] statement | | `+` operator | \|s: &str, x: T\| -> String | `to_string` | concatenates the [custom type] with another [string] | | `+` operator | \|x: &mut T, s: &str\| -> String | `to_string` | concatenates another [string] with the [custom type] | | `+=` operator | \|s: &mut ImmutableString, x: T\| | `to_string` | appends the [custom type] to an existing [string] |