1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
use std::convert::{TryFrom, TryInto}; use crate::data::Value; use crate::executor::evaluate::Evaluated; use crate::result::{Error, Result}; #[derive(PartialEq, Eq, Hash, Clone, std::fmt::Debug)] pub enum GroupKey { I64(i64), Bool(bool), Str(String), Null, } impl TryFrom<&Evaluated<'_>> for GroupKey { type Error = Error; fn try_from(evaluated: &Evaluated<'_>) -> Result<Self> { match evaluated { Evaluated::LiteralRef(l) => Value::try_from(*l)?.try_into(), Evaluated::Literal(l) => Value::try_from(l)?.try_into(), Evaluated::ValueRef(v) => (*v).try_into(), Evaluated::Value(v) => v.try_into(), Evaluated::StringRef(s) => Ok(GroupKey::Str(s.to_string())), } } }