coercion from base64 to vec

main
Ziyang Hu 1 year ago
parent 76fa6b70fc
commit 1e8f3dbf60

@ -8,6 +8,7 @@
use std::cmp::Reverse; use std::cmp::Reverse;
use std::fmt::{Display, Formatter}; use std::fmt::{Display, Formatter};
use std::mem;
use std::time::{SystemTime, UNIX_EPOCH}; use std::time::{SystemTime, UNIX_EPOCH};
use base64::engine::general_purpose::STANDARD; use base64::engine::general_purpose::STANDARD;
@ -283,6 +284,37 @@ impl NullableColType {
data data
} }
} }
DataValue::Str(s) => {
let bytes = STANDARD.decode(s).map_err(|_| make_err())?;
match eltype {
VecElementType::F32 => {
let f32_count = bytes.len() / mem::size_of::<f32>();
if f32_count != *len {
bail!(make_err())
}
let arr = unsafe {
ndarray::ArrayView1::from_shape_ptr(
ndarray::Dim([f32_count]),
bytes.as_ptr() as *const f32,
)
};
DataValue::Vec(Vector::F32(arr.to_owned()))
}
VecElementType::F64 => {
let f64_count = bytes.len() / mem::size_of::<f64>();
if f64_count != *len {
bail!(make_err())
}
let arr = unsafe {
ndarray::ArrayView1::from_shape_ptr(
ndarray::Dim([f64_count]),
bytes.as_ptr() as *const f64,
)
};
DataValue::Vec(Vector::F64(arr.to_owned()))
}
}
}
_ => bail!(make_err()), _ => bail!(make_err()),
}, },
ColType::Tuple(typ) => { ColType::Tuple(typ) => {

Loading…
Cancel
Save