refactor: Use prost's enum helper functions for converting from ints

pull/24376/head
Carol (Nichols || Goulding) 2021-03-12 14:25:31 -05:00 committed by kodiakhq[bot]
parent 1b36d6b0cd
commit cc8390f763
2 changed files with 46 additions and 82 deletions

View File

@ -462,43 +462,30 @@ fn build_node(value: RPCValue, inputs: Vec<Expr>) -> Result<Expr> {
/// Creates an expr from a "Logical" Node
fn build_logical_node(logical: i32, inputs: Vec<Expr>) -> Result<Expr> {
// This ideally could be a match, but I couldn't find a safe way
// to match an i32 to RPCLogical except for ths
let logical_enum = RPCLogical::from_i32(logical);
if logical == RPCLogical::And as i32 {
build_binary_expr(Operator::And, inputs)
} else if logical == RPCLogical::Or as i32 {
build_binary_expr(Operator::Or, inputs)
} else {
UnknownLogicalNode { logical }.fail()
match logical_enum {
Some(RPCLogical::And) => build_binary_expr(Operator::And, inputs),
Some(RPCLogical::Or) => build_binary_expr(Operator::Or, inputs),
None => UnknownLogicalNode { logical }.fail(),
}
}
/// Creates an expr from a "Comparsion" Node
fn build_comparison_node(comparison: i32, inputs: Vec<Expr>) -> Result<Expr> {
// again, this would ideally be a match but I couldn't figure out how to
// match an i32 to the enum values
let comparison_enum = RPCComparison::from_i32(comparison);
if comparison == RPCComparison::Equal as i32 {
build_binary_expr(Operator::Eq, inputs)
} else if comparison == RPCComparison::NotEqual as i32 {
build_binary_expr(Operator::NotEq, inputs)
} else if comparison == RPCComparison::StartsWith as i32 {
StartsWithNotSupported {}.fail()
} else if comparison == RPCComparison::Regex as i32 {
RegExpNotSupported {}.fail()
} else if comparison == RPCComparison::NotRegex as i32 {
NotRegExpNotSupported {}.fail()
} else if comparison == RPCComparison::Lt as i32 {
build_binary_expr(Operator::Lt, inputs)
} else if comparison == RPCComparison::Lte as i32 {
build_binary_expr(Operator::LtEq, inputs)
} else if comparison == RPCComparison::Gt as i32 {
build_binary_expr(Operator::Gt, inputs)
} else if comparison == RPCComparison::Gte as i32 {
build_binary_expr(Operator::GtEq, inputs)
} else {
UnknownComparisonNode { comparison }.fail()
match comparison_enum {
Some(RPCComparison::Equal) => build_binary_expr(Operator::Eq, inputs),
Some(RPCComparison::NotEqual) => build_binary_expr(Operator::NotEq, inputs),
Some(RPCComparison::StartsWith) => StartsWithNotSupported {}.fail(),
Some(RPCComparison::Regex) => RegExpNotSupported {}.fail(),
Some(RPCComparison::NotRegex) => NotRegExpNotSupported {}.fail(),
Some(RPCComparison::Lt) => build_binary_expr(Operator::Lt, inputs),
Some(RPCComparison::Lte) => build_binary_expr(Operator::LtEq, inputs),
Some(RPCComparison::Gt) => build_binary_expr(Operator::Gt, inputs),
Some(RPCComparison::Gte) => build_binary_expr(Operator::GtEq, inputs),
None => UnknownComparisonNode { comparison }.fail(),
}
}
@ -630,36 +617,23 @@ fn convert_aggregate(aggregate: Option<RPCAggregate>) -> Result<QueryAggregate>
};
let aggregate_type = aggregate.r#type;
let aggregate_type_enum = RPCAggregateType::from_i32(aggregate_type);
if aggregate_type == RPCAggregateType::None as i32 {
Ok(QueryAggregate::None)
} else if aggregate_type == RPCAggregateType::Sum as i32 {
Ok(QueryAggregate::Sum)
} else if aggregate_type == RPCAggregateType::Count as i32 {
Ok(QueryAggregate::Count)
} else if aggregate_type == RPCAggregateType::Min as i32 {
Ok(QueryAggregate::Min)
} else if aggregate_type == RPCAggregateType::Max as i32 {
Ok(QueryAggregate::Max)
} else if aggregate_type == RPCAggregateType::First as i32 {
Ok(QueryAggregate::First)
} else if aggregate_type == RPCAggregateType::Last as i32 {
Ok(QueryAggregate::Last)
} else if aggregate_type == RPCAggregateType::Mean as i32 {
Ok(QueryAggregate::Mean)
} else {
UnknownAggregate { aggregate_type }.fail()
match aggregate_type_enum {
Some(RPCAggregateType::None) => Ok(QueryAggregate::None),
Some(RPCAggregateType::Sum) => Ok(QueryAggregate::Sum),
Some(RPCAggregateType::Count) => Ok(QueryAggregate::Count),
Some(RPCAggregateType::Min) => Ok(QueryAggregate::Min),
Some(RPCAggregateType::Max) => Ok(QueryAggregate::Max),
Some(RPCAggregateType::First) => Ok(QueryAggregate::First),
Some(RPCAggregateType::Last) => Ok(QueryAggregate::Last),
Some(RPCAggregateType::Mean) => Ok(QueryAggregate::Mean),
None => UnknownAggregate { aggregate_type }.fail(),
}
}
pub fn convert_group_type(group: i32) -> Result<RPCGroup> {
if group == RPCGroup::None as i32 {
Ok(RPCGroup::None)
} else if group == RPCGroup::By as i32 {
Ok(RPCGroup::By)
} else {
UnknownGroup { group_type: group }.fail()
}
RPCGroup::from_i32(group).ok_or(Error::UnknownGroup { group_type: group })
}
/// Creates a representation of some struct (in another crate that we
@ -774,36 +748,25 @@ fn format_value<'a>(value: &'a RPCValue, f: &mut fmt::Formatter<'_>) -> fmt::Res
}
fn format_logical(v: i32, f: &mut fmt::Formatter<'_>) -> fmt::Result {
if v == RPCLogical::And as i32 {
write!(f, "AND")
} else if v == RPCLogical::Or as i32 {
write!(f, "Or")
} else {
write!(f, "UNKNOWN_LOGICAL:{}", v)
match RPCLogical::from_i32(v) {
Some(RPCLogical::And) => write!(f, "AND"),
Some(RPCLogical::Or) => write!(f, "Or"),
None => write!(f, "UNKNOWN_LOGICAL:{}", v),
}
}
fn format_comparison(v: i32, f: &mut fmt::Formatter<'_>) -> fmt::Result {
if v == RPCComparison::Equal as i32 {
write!(f, "==")
} else if v == RPCComparison::NotEqual as i32 {
write!(f, "!=")
} else if v == RPCComparison::StartsWith as i32 {
write!(f, "StartsWith")
} else if v == RPCComparison::Regex as i32 {
write!(f, "RegEx")
} else if v == RPCComparison::NotRegex as i32 {
write!(f, "NotRegex")
} else if v == RPCComparison::Lt as i32 {
write!(f, "<")
} else if v == RPCComparison::Lte as i32 {
write!(f, "<=")
} else if v == RPCComparison::Gt as i32 {
write!(f, ">")
} else if v == RPCComparison::Gte as i32 {
write!(f, ">=")
} else {
write!(f, "UNKNOWN_COMPARISON:{}", v)
match RPCComparison::from_i32(v) {
Some(RPCComparison::Equal) => write!(f, "=="),
Some(RPCComparison::NotEqual) => write!(f, "!="),
Some(RPCComparison::StartsWith) => write!(f, "StartsWith"),
Some(RPCComparison::Regex) => write!(f, "RegEx"),
Some(RPCComparison::NotRegex) => write!(f, "NotRegex"),
Some(RPCComparison::Lt) => write!(f, "<"),
Some(RPCComparison::Lte) => write!(f, "<="),
Some(RPCComparison::Gt) => write!(f, ">"),
Some(RPCComparison::Gte) => write!(f, ">="),
None => write!(f, "UNKNOWN_COMPARISON:{}", v),
}
}

View File

@ -3,6 +3,7 @@ use futures::prelude::*;
use generated_types::{
aggregate::AggregateType,
google::protobuf::{Any, Empty},
measurement_fields_response::FieldType,
node::{Comparison, Type as NodeType, Value},
read_group_request::Group,
read_response::{frame::Data, *},
@ -277,7 +278,7 @@ async fn measurement_fields_endpoint(
let field = &fields[0];
assert_eq!(field.key, "value");
assert_eq!(field.r#type, DataType::Float as i32);
assert_eq!(field.r#type(), FieldType::Float);
assert_eq!(field.timestamp, scenario.ns_since_epoch() + 4);
}