hive_router_plan_executor/headers/
errors.rs

1use http::header::{InvalidHeaderName, InvalidHeaderValue};
2use regex_automata::meta::BuildError;
3use vrl::{diagnostic::DiagnosticList, prelude::ExpressionError};
4
5#[derive(thiserror::Error, Debug)]
6pub enum HeaderRuleCompileError {
7    #[error("Invalid header name '{0}'. Please check the configuration. Reason: {1}")]
8    BadHeaderName(String, InvalidHeaderName),
9    #[error("Invalid header value for header '{0}'. Please check the configuration. Reason: {1}")]
10    BadHeaderValue(String, InvalidHeaderValue),
11    #[error("The 'rename' option is only allowed when propagating a single header specified with 'named'. You cannot use 'rename' when propagating multiple headers or when using 'matching'.")]
12    InvalidRename,
13    #[error("The 'default' option is only allowed when propagating a single header specified with 'named'. You cannot use 'default' when propagating multiple headers or when using 'matching'.")]
14    InvalidDefault,
15    #[error("Failed to build regex for header matching. Please check your regex patterns for syntax errors. Reason: {0}")]
16    RegexBuild(#[from] Box<BuildError>),
17    #[error("Failed to compile VRL expression for header '{0}'. Please check your VRL expression for syntax errors. Diagnostic: {1}")]
18    ExpressionBuild(String, String),
19}
20
21#[derive(thiserror::Error, Debug, Clone)]
22pub enum HeaderRuleRuntimeError {
23    #[error("Failed to evaluate VRL expression for header '{0}'. Reason: {1}")]
24    ExpressionEvaluation(String, Box<ExpressionError>),
25    #[error("Invalid header value for header '{0}'.")]
26    BadHeaderValue(String),
27}
28
29impl HeaderRuleCompileError {
30    pub fn new_expression_build(header_name: String, diagnostics: DiagnosticList) -> Self {
31        HeaderRuleCompileError::ExpressionBuild(
32            header_name,
33            diagnostics
34                .errors()
35                .into_iter()
36                .map(|d| d.code.to_string() + ": " + &d.message)
37                .collect::<Vec<_>>()
38                .join(", "),
39        )
40    }
41}
42
43impl HeaderRuleRuntimeError {
44    pub fn new_expression_evaluation(header_name: String, error: Box<ExpressionError>) -> Self {
45        HeaderRuleRuntimeError::ExpressionEvaluation(header_name, error)
46    }
47}