On Wed Sep 27, 2023 at 6:29 PM CEST, Erik Schilling wrote: > While one would usually use the ToOwned [1] contract in rust, libgpipd's > API only allows copying that may fail. > > Thus, we cannot implement the existing trait and roll our own method. I > went with `try_clone` since that seems to be used in similar cases across > the `std` crate [2]. > > It also closes the gap of not having any way to clone owned instances. > Though - again - not through the Clone trait which may not fail [3]. > > [1] https://doc.rust-lang.org/std/borrow/trait.ToOwned.html > [2] https://doc.rust-lang.org/std/index.html?search=try_clone > [3] https://doc.rust-lang.org/std/clone/trait.Clone.html > > Signed-off-by: Erik Schilling <erik.schilling@xxxxxxxxxx> > --- > bindings/rust/libgpiod/src/lib.rs | 1 + > bindings/rust/libgpiod/src/line_info.rs | 16 ++++++++++ > bindings/rust/libgpiod/tests/line_info.rs | 53 +++++++++++++++++++++++++++++++ > 3 files changed, 70 insertions(+) [...] > diff --git a/bindings/rust/libgpiod/src/line_info.rs b/bindings/rust/libgpiod/src/line_info.rs > index 32c4bb2..fe01a14 100644 > --- a/bindings/rust/libgpiod/src/line_info.rs > +++ b/bindings/rust/libgpiod/src/line_info.rs > @@ -58,6 +58,22 @@ impl Info { > self as *const _ as *mut _ > } > > + /// Clones the [gpiod::gpiod_line_info] instance to an [InfoOwned] > + pub fn try_clone(&self) -> Result<InfoOwned> { Hm... I realized that we have `event_clone()` for cloning an `Event` and `settings_clone()` for cloning `line::Settings`. Should better stay consistent here... However, I think the name `try_clone()` sounds more suitable to me. Any opinions? I could send a patch to rename the existing cloning methods to `try_clone()`. - Erik