Skip to content

Commit dab8dc0

Browse files
gtk: Implement convenience traits for StringObject
Sadly we can't have AsRef/Deref implemented as well :( Fixes #1360
1 parent 5810f2d commit dab8dc0

File tree

3 files changed

+104
-0
lines changed

3 files changed

+104
-0
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@
22

33
## [Unreleased]
44

5+
<<<<<<< HEAD
6+
=======
7+
Bilal Elmoussaoui:
8+
- gtk: Implement convenience traits for StringObject
9+
10+
>>>>>>> 0b4dd7717 (gtk: Implement convenience traits for StringObject)
511
## [0.6.5]
612

713
Fabio Valentini:

gtk4/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,7 @@ mod signal_list_item_factory;
183183
mod snapshot;
184184
mod spin_button;
185185
mod string_list;
186+
mod string_object;
186187
mod text;
187188
mod text_buffer;
188189
mod tree_model;

gtk4/src/string_object.rs

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
// Take a look at the license at the top of the repository in the LICENSE file.
2+
3+
use crate::StringObject;
4+
use glib::{GStr, GString};
5+
6+
impl From<StringObject> for String {
7+
#[inline]
8+
fn from(value: StringObject) -> Self {
9+
skip_assert_initialized!();
10+
Self::from(&value)
11+
}
12+
}
13+
14+
impl From<StringObject> for GString {
15+
#[inline]
16+
fn from(value: StringObject) -> Self {
17+
skip_assert_initialized!();
18+
Self::from(&value)
19+
}
20+
}
21+
22+
impl<'a> From<&'a StringObject> for String {
23+
#[inline]
24+
fn from(value: &'a StringObject) -> Self {
25+
skip_assert_initialized!();
26+
value.string().to_string()
27+
}
28+
}
29+
30+
impl<'a> From<&'a StringObject> for GString {
31+
#[inline]
32+
fn from(value: &'a StringObject) -> Self {
33+
skip_assert_initialized!();
34+
value.string()
35+
}
36+
}
37+
38+
impl From<String> for StringObject {
39+
#[inline]
40+
fn from(value: String) -> Self {
41+
skip_assert_initialized!();
42+
Self::new(&value)
43+
}
44+
}
45+
46+
impl<'a> From<&'a String> for StringObject {
47+
#[inline]
48+
fn from(value: &'a String) -> Self {
49+
skip_assert_initialized!();
50+
Self::new(value)
51+
}
52+
}
53+
54+
impl<'a> From<&'a GStr> for StringObject {
55+
#[inline]
56+
fn from(v: &'a GStr) -> Self {
57+
skip_assert_initialized!();
58+
Self::new(v)
59+
}
60+
}
61+
62+
impl From<GString> for StringObject {
63+
#[inline]
64+
fn from(value: GString) -> Self {
65+
skip_assert_initialized!();
66+
Self::new(&value)
67+
}
68+
}
69+
70+
impl<'a> From<&'a GString> for StringObject {
71+
#[inline]
72+
fn from(value: &'a GString) -> Self {
73+
skip_assert_initialized!();
74+
Self::new(value)
75+
}
76+
}
77+
78+
impl From<&str> for StringObject {
79+
#[inline]
80+
fn from(value: &str) -> Self {
81+
skip_assert_initialized!();
82+
Self::new(value)
83+
}
84+
}
85+
86+
#[cfg(test)]
87+
mod tests {
88+
use super::StringObject;
89+
use crate as gtk4;
90+
91+
#[test]
92+
fn from_into() {
93+
let obj = StringObject::new("some_str");
94+
assert_eq!(String::from(&obj), obj.string());
95+
assert_eq!(String::from(obj), "some_str");
96+
}
97+
}

0 commit comments

Comments
 (0)