pub fn derive_downgrade_fields(fields: Fields) -> DowngradeStructPartsExpand description
This function generates parts needed to derive Downgrade and Upgrade implementations.
§Example
Let’s assume following types are declared.
ⓘ
struct Unnamed(X, Y);
struct Named {
x: X,
y: Y,
}
enum Choice {
This(X, Y),
That { x: X, y: Y },
}§weak_fields
For the struct Unnamed and for a enum’s variant Choice::This
it will be (<X as Downgrade>::Weak, <Y as Downgrade>::Weak).
For the struct Named and for a enum’s variant Choice::That
it will be { x: <X as Downgrade>::Weak, y: <Y as Downgrade>::Weak, }.
§end_of_struct
It is a semicolon (;) for an Unnamed and is blank for the rest.
§destruct
For the struct Unnamed and for a enum’s variant Choice::This
it will be (ref _0, ref _1).
For the struct Named and for a enum’s variant Choice::That
it will be { ref x, ref y }.
So it can be used as a destructuring pattern for values of both types,
strong and weak.
ⓘ
let Unnamed (ref _0, ref _1) = <expression>;
let Named { ref x, ref y } = <expression>;
match <expression> {
Choice::This (ref _0, ref _1) => ... ,
Choice::That { ref x, ref y } => ... ,
}§downgrade
ⓘ
(
glib::clone::Downgrade::downgrade(_0),
glib::clone::Downgrade::downgrade(_1),
)
{
x: glib::clone::Downgrade::downgrade(x),
y: glib::clone::Downgrade::downgrade(y),
}§upgrade
ⓘ
(
glib::clone::Upgrade::upgrade(_0)?,
glib::clone::Upgrade::upgrade(_1)?,
)
{
x: glib::clone::Upgrade::upgrade(x)?,
y: glib::clone::Upgrade::upgrade(y)?,
}