Struct StringName
pub struct StringName { /* private fields */ }
Expand description
A string optimized for unique names.
StringNames are immutable strings designed for representing unique names. StringName ensures that only one instance of a given name exists.
§Ordering
In Godot, StringName
s are not ordered lexicographically, and the ordering relation is not stable across multiple runs of your
application. Therefore, this type does not implement PartialOrd
and Ord
, as it would be very easy to introduce bugs by accidentally
relying on lexicographical ordering.
Instead, we provide transient_ord()
for ordering relations.
§Null bytes
Note that Godot ignores any bytes after a null-byte. This means that for instance "hello, world!"
and
"hello, world!\0 ignored by Godot"
will be treated as the same string if converted to a StringName
.
§Performance
The fastest way to create string names is by using null-terminated C-string literals such as c"MyClass"
. These have 'static
lifetime and
can be used directly by Godot, without allocation or conversion. The encoding is limited to Latin-1, however. See the corresponding
From<&'static CStr>
impl.
§All string types
Implementations§
§impl StringName
impl StringName
pub fn arg<T>(&self) -> impl AsArg<T>
pub fn arg<T>(&self) -> impl AsArg<T>
Use as argument for an impl AsArg<GString|NodePath>
parameter.
This is a convenient way to convert arguments of similar string types.
§Example
Node::set_name()
takes GString
, let’s pass a StringName
:
let name = StringName::from("my cool node");
let mut node = Node::new_alloc();
node.set_name(name.arg());
§Generic bounds
The bounds are implementation-defined and may change at any time. Do not use this function in a generic context requiring T
– use the From
trait or ParamType
in that case.
pub fn transient_ord(&self) -> TransientStringNameOrd<'_>
pub fn transient_ord(&self) -> TransientStringNameOrd<'_>
O(1), non-lexicographic, non-stable ordering relation.
The result of the comparison is not lexicographic and not stable across multiple runs of your application.
However, it is very fast. It doesn’t depend on the length of the strings, but on the memory location of string names. This can still be useful if you need to establish an ordering relation, but are not interested in the actual order of the strings (example: binary search).
For lexicographical ordering, convert to GString
(significantly slower).
§impl StringName
impl StringName
pub fn casecmp_to(&self, to: impl AsArg<GString>) -> i64
Trait Implementations§
§impl Clone for StringName
impl Clone for StringName
§fn clone(&self) -> StringName
fn clone(&self) -> StringName
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read more§impl Debug for StringName
Uses literal syntax from GDScript: &"string_name"
impl Debug for StringName
Uses literal syntax from GDScript: &"string_name"
§impl Default for StringName
impl Default for StringName
§fn default() -> StringName
fn default() -> StringName
§impl Display for StringName
impl Display for StringName
§impl Export for StringName
impl Export for StringName
§fn export_hint() -> PropertyHintInfo
fn export_hint() -> PropertyHintInfo
§impl From<&'static CStr> for StringName
Available on since_api="4.2"
only.
impl From<&'static CStr> for StringName
since_api="4.2"
only.§fn from(c_str: &'static CStr) -> StringName
fn from(c_str: &'static CStr) -> StringName
Creates a StringName
from a static ASCII/Latin-1 c"string"
.
This avoids unnecessary copies and allocations and directly uses the backing buffer. Useful for literals.
Note that while Latin-1 encoding is the most common encoding for c-strings, it isn’t a requirement. So if your c-string uses a different encoding (e.g. UTF-8), it is possible that some characters will not show up as expected.
§Example
use godot::builtin::StringName;
// '±' is a Latin-1 character with codepoint 0xB1. Note that this is not UTF-8, where it would need two bytes.
let sname = StringName::from(c"\xb1 Latin-1 string");
§impl From<&GString> for StringName
impl From<&GString> for StringName
§fn from(string: &GString) -> StringName
fn from(string: &GString) -> StringName
See also [GString::to_string_name()
].
§impl From<&NodePath> for StringName
impl From<&NodePath> for StringName
§fn from(path: &NodePath) -> StringName
fn from(path: &NodePath) -> StringName
§impl From<&String> for StringName
impl From<&String> for StringName
§fn from(value: &String) -> StringName
fn from(value: &String) -> StringName
§impl From<&StringName> for GString
impl From<&StringName> for GString
§fn from(string: &StringName) -> GString
fn from(string: &StringName) -> GString
§impl From<&StringName> for NodePath
impl From<&StringName> for NodePath
§fn from(string_name: &StringName) -> NodePath
fn from(string_name: &StringName) -> NodePath
§impl From<&str> for StringName
impl From<&str> for StringName
§fn from(string: &str) -> StringName
fn from(string: &str) -> StringName
§impl From<GString> for StringName
impl From<GString> for StringName
§fn from(string: GString) -> StringName
fn from(string: GString) -> StringName
Converts this GString
to a StringName
.
This is identical to StringName::from(&string)
, and as such there is no performance benefit.
§impl From<NodePath> for StringName
impl From<NodePath> for StringName
§fn from(path: NodePath) -> StringName
fn from(path: NodePath) -> StringName
Converts this NodePath
to a StringName
.
This is identical to StringName::from(&path)
, and as such there is no performance benefit.
§impl From<String> for StringName
impl From<String> for StringName
§fn from(value: String) -> StringName
fn from(value: String) -> StringName
§impl From<StringName> for GString
impl From<StringName> for GString
§fn from(string_name: StringName) -> GString
fn from(string_name: StringName) -> GString
Converts this StringName
to a GString
.
This is identical to GString::from(&string_name)
, and as such there is no performance benefit.
§impl From<StringName> for NodePath
impl From<StringName> for NodePath
§fn from(string_name: StringName) -> NodePath
fn from(string_name: StringName) -> NodePath
Converts this StringName
to a NodePath
.
This is identical to NodePath::from(&string_name)
, and as such there is no performance benefit.
§impl FromGodot for StringName
impl FromGodot for StringName
§fn try_from_godot(
via: <StringName as GodotConvert>::Via,
) -> Result<StringName, ConvertError>
fn try_from_godot( via: <StringName as GodotConvert>::Via, ) -> Result<StringName, ConvertError>
Err
on failure.§fn from_godot(via: Self::Via) -> Self
fn from_godot(via: Self::Via) -> Self
§fn try_from_variant(variant: &Variant) -> Result<Self, ConvertError>
fn try_from_variant(variant: &Variant) -> Result<Self, ConvertError>
Variant
, returning Err
on failure.§fn from_variant(variant: &Variant) -> Self
fn from_variant(variant: &Variant) -> Self
§impl FromStr for StringName
impl FromStr for StringName
§type Err = Infallible
type Err = Infallible
§fn from_str(string: &str) -> Result<StringName, <StringName as FromStr>::Err>
fn from_str(string: &str) -> Result<StringName, <StringName as FromStr>::Err>
s
to return a value of this type. Read more§impl GodotConvert for StringName
impl GodotConvert for StringName
§type Via = StringName
type Via = StringName
Self
is represented in Godot.§impl Hash for StringName
impl Hash for StringName
§impl ParamType for StringName
impl ParamType for StringName
§fn owned_to_arg<'v>(self) -> <StringName as ParamType>::Arg<'v>
fn owned_to_arg<'v>(self) -> <StringName as ParamType>::Arg<'v>
impl AsArg<T>
. Read more§impl PartialEq for StringName
impl PartialEq for StringName
§impl ToGodot for StringName
impl ToGodot for StringName
§type ToVia<'v> = <StringName as GodotConvert>::Via
type ToVia<'v> = <StringName as GodotConvert>::Via
§fn to_godot(&self) -> <StringName as ToGodot>::ToVia<'_>
fn to_godot(&self) -> <StringName as ToGodot>::ToVia<'_>
§fn to_variant(&self) -> Variant
fn to_variant(&self) -> Variant
§impl Var for StringName
impl Var for StringName
fn get_property(&self) -> <StringName as GodotConvert>::Via
fn set_property(&mut self, value: <StringName as GodotConvert>::Via)
§fn var_hint() -> PropertyHintInfo
fn var_hint() -> PropertyHintInfo
GodotType::property_info
, e.g. for enums/newtypes.impl ArrayElement for StringName
impl AsArg<StringName> for &'static CStr
since_api="4.2"
only.