use vortex_error::VortexError;
use crate::Scalar;
impl TryFrom<&Scalar> for () {
type Error = VortexError;
fn try_from(scalar: &Scalar) -> Result<Self, Self::Error> {
scalar.value().as_null()
}
}
impl TryFrom<Scalar> for () {
type Error = VortexError;
fn try_from(scalar: Scalar) -> Result<Self, Self::Error> {
<()>::try_from(&scalar)
}
}
#[cfg(test)]
mod tests {
use vortex_dtype::{DType, Nullability};
use super::*;
#[test]
fn test_null_scalar_try_from_ref() {
let null_scalar = Scalar::null(DType::Null);
let result = <()>::try_from(&null_scalar);
assert!(result.is_ok());
}
#[test]
fn test_null_scalar_try_from_owned() {
let null_scalar = Scalar::null(DType::Null);
let result = <()>::try_from(null_scalar);
assert!(result.is_ok());
}
#[test]
fn test_non_null_scalar_fails_ref() {
let int_scalar = Scalar::primitive(42i32, Nullability::NonNullable);
let result = <()>::try_from(&int_scalar);
assert!(result.is_err());
}
#[test]
fn test_non_null_scalar_fails_owned() {
let int_scalar = Scalar::primitive(42i32, Nullability::NonNullable);
let result = <()>::try_from(int_scalar);
assert!(result.is_err());
}
#[test]
fn test_nullable_primitive_with_null_value() {
let null_int = Scalar::null_typed::<i32>();
let result = <()>::try_from(&null_int);
assert!(result.is_ok());
}
#[test]
fn test_null_string() {
let null_string = Scalar::null_typed::<String>();
let result = <()>::try_from(&null_string);
assert!(result.is_ok());
}
#[test]
fn test_null_bool() {
let null_bool = Scalar::null_typed::<bool>();
let result = <()>::try_from(&null_bool);
assert!(result.is_ok());
}
#[test]
fn test_null_struct() {
use vortex_dtype::{FieldDType, StructFields};
let struct_dtype = DType::Struct(
StructFields::from_iter([("field1", FieldDType::from(DType::Null))]),
Nullability::Nullable,
);
let null_struct = Scalar::struct_(struct_dtype, vec![Scalar::null(DType::Null)]);
let result = <()>::try_from(&null_struct);
assert!(result.is_err());
}
#[test]
fn test_null_binary() {
let null_binary = Scalar::null(DType::Binary(Nullability::Nullable));
let result = <()>::try_from(&null_binary);
assert!(result.is_ok());
}
}