diff --git a/crates/mongodb-agent-common/src/interface_types/mongo_agent_error.rs b/crates/mongodb-agent-common/src/interface_types/mongo_agent_error.rs index d36f8f3e..3f80e2d6 100644 --- a/crates/mongodb-agent-common/src/interface_types/mongo_agent_error.rs +++ b/crates/mongodb-agent-common/src/interface_types/mongo_agent_error.rs @@ -15,6 +15,7 @@ pub enum MongoAgentError { BadCollectionSchema(String, bson::Bson, bson::de::Error), BadQuery(anyhow::Error), InvalidVariableName(String), + InvalidScalarTypeName(String), MongoDB(#[from] mongodb::error::Error), MongoDBDeserialization(#[from] mongodb::bson::de::Error), MongoDBSerialization(#[from] mongodb::bson::ser::Error), @@ -64,6 +65,10 @@ impl MongoAgentError { StatusCode::BAD_REQUEST, ErrorResponse::new(&format!("Column identifier includes characters that are not permitted in a MongoDB variable name: {name}")) ), + InvalidScalarTypeName(name) => ( + StatusCode::BAD_REQUEST, + ErrorResponse::new(&format!("Scalar value includes invalid type name: {name}")) + ), MongoDB(err) => (StatusCode::BAD_REQUEST, ErrorResponse::new(&err)), MongoDBDeserialization(err) => (StatusCode::BAD_REQUEST, ErrorResponse::new(&err)), MongoDBSerialization(err) => { diff --git a/crates/mongodb-agent-common/src/query/make_selector.rs b/crates/mongodb-agent-common/src/query/make_selector.rs index 974282c0..88317403 100644 --- a/crates/mongodb-agent-common/src/query/make_selector.rs +++ b/crates/mongodb-agent-common/src/query/make_selector.rs @@ -21,13 +21,14 @@ fn bson_from_scalar_value( value: &serde_json::Value, value_type: &str, ) -> Result { - // TODO: fail on unrecognized types let bson_type = BsonScalarType::from_bson_name(value_type).ok(); match bson_type { Some(t) => { json_to_bson_scalar(t, value.clone()).map_err(|e| MongoAgentError::BadQuery(anyhow!(e))) } - None => bson::to_bson(value).map_err(|e| MongoAgentError::BadQuery(anyhow!(e))), + None => Err(MongoAgentError::InvalidScalarTypeName( + value_type.to_owned(), + )), } }