Skip to content

Commit b4005ea

Browse files
committed
Address issue pola-rs#1105
1 parent 471c070 commit b4005ea

File tree

6 files changed

+25
-16
lines changed

6 files changed

+25
-16
lines changed

src/rust/Cargo.lock

Lines changed: 7 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/rust/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ opt-level = 3 # was 1 to support 1.66, but since 1.70 is needed anyway it does n
3636
opt-level = 3
3737

3838
[dependencies]
39-
extendr-api = { git = "https://github.com/extendr/extendr", rev = "1895bfc8ee22347665900caa0e48da4f0b13232f", default-features = false, features = [
39+
extendr-api = { git = "https://github.com/extendr/extendr", rev = "928aee2c3ee1b1fc5b0d4b449de3807da30ecd8f", default-features = false, features = [
4040
"result_list",
4141
"serde",
4242
] }

src/rust/src/arrow_interop/mod.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@ pub enum RArrowArrayClass {
1111
NanoArrowArray,
1212
}
1313

14-
impl<'a> FromRobj<'a> for RArrowArrayClass {
15-
fn from_robj(robj: &Robj) -> std::result::Result<Self, &'static str> {
14+
impl TryFrom<&Robj> for RArrowArrayClass {
15+
type Error = &'static str;
16+
fn try_from(robj: &Robj) -> std::result::Result<Self, &'static str> {
1617
if robj.inherits("nanoarrow_array") {
1718
Ok(RArrowArrayClass::NanoArrowArray)
1819
} else if robj.inherits("Array") {

src/rust/src/arrow_interop/to_rust.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ pub fn arrow_array_to_rust(arrow_array: Robj) -> Result<ArrayRef, String> {
1818
)
1919
};
2020

21-
RArrowArrayClass::from_robj(&arrow_array)?
21+
RArrowArrayClass::try_from(&arrow_array)?
2222
.get_package()
2323
.get_export_array_func()?
2424
.call(pairlist!(&arrow_array, ext_a, ext_s))?;

src/rust/src/conversion_r_to_s.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -153,10 +153,11 @@ fn recursive_robjname2series_tree(x: &Robj, name: &str) -> pl::PolarsResult<Seri
153153
}
154154

155155
Rtype::Raw => {
156-
let rpolars_raw_list = list!(x)
156+
let mut binding = list!(x);
157+
let rpolars_raw_list = binding
157158
.set_class(["rpolars_raw_list", "list"])
158159
.map_err(|err| pl::polars_err!(ComputeError: err.to_string()))?;
159-
recursive_robjname2series_tree(&rpolars_raw_list, name)
160+
recursive_robjname2series_tree(&rpolars_raw_list.clone().into_robj(), name)
160161
}
161162

162163
Rtype::List if x.inherits("rpolars_raw_list") => {

src/rust/src/conversion_s_to_r.rs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ pub fn pl_series_to_list(
4949
.collect_robj()
5050
.set_class(&["integer64"])
5151
.expect("internal error could not set class label 'integer64'")
52+
.clone()
5253
}),
5354
_ => Err(pl::PolarsError::InvalidOperation(
5455
"`int64_conversion ` must be one of 'float', 'string', 'bit64'".into(),
@@ -109,6 +110,7 @@ pub fn pl_series_to_list(
109110
.into_robj()
110111
.set_class(["rpolars_raw_list", "list"])
111112
.expect("this class label is always valid")
113+
.clone()
112114
}),
113115
Enum(_, _) => s
114116
.categorical()
@@ -181,7 +183,8 @@ pub fn pl_series_to_list(
181183
.into_iter()
182184
.collect_robj()
183185
.set_class(&["Date"])
184-
.expect("internal error: class label Date failed")),
186+
.expect("internal error: class label Date failed")
187+
.clone()),
185188
Null => Ok((extendr_api::NULL).into_robj()),
186189
Time => s
187190
.cast(&Int64)?
@@ -195,8 +198,9 @@ pub fn pl_series_to_list(
195198
.map(|mut robj| {
196199
robj.set_class(&["PTime"])
197200
.expect("internal error: class label PTime failed")
201+
.clone()
198202
})
199-
.map(|mut robj| robj.set_attrib("tu", "ns"))
203+
.map(|mut robj| robj.set_attrib("tu", "ns").cloned())
200204
.expect("internal error: attr tu failed")
201205
.map_err(|err| {
202206
pl_error::ComputeError(
@@ -248,9 +252,12 @@ pub fn pl_series_to_list(
248252
.map(|mut robj| {
249253
robj.set_class(&["POSIXct", "POSIXt"])
250254
.expect("internal error: class POSIXct label failed")
255+
.clone()
251256
})
252257
.map(|mut robj| {
253-
robj.set_attrib("tzone", opt_tz.as_ref().map(|s| s.as_str()).unwrap_or(""))
258+
let res = robj
259+
.set_attrib("tzone", opt_tz.as_ref().map(|s| s.as_str()).unwrap_or(""));
260+
res.cloned()
254261
})
255262
.expect("internal error: attr tzone failed")
256263
.map_err(|err| {

0 commit comments

Comments
 (0)