pipeline/
error.rs

1// Copyright 2023 Greptime Team
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15use std::any::Any;
16
17use common_error::ext::ErrorExt;
18use common_error::status_code::StatusCode;
19use common_macro::stack_trace_debug;
20use datatypes::timestamp::TimestampNanosecond;
21use snafu::{Location, Snafu};
22
23#[derive(Snafu)]
24#[snafu(visibility(pub))]
25#[stack_trace_debug]
26pub enum Error {
27    #[snafu(display("Empty input field"))]
28    EmptyInputField {
29        #[snafu(implicit)]
30        location: Location,
31    },
32
33    #[snafu(display("Missing input field"))]
34    MissingInputField {
35        #[snafu(implicit)]
36        location: Location,
37    },
38
39    #[snafu(display(
40        "Field renaming must be a string pair of 'key' and 'rename_to', got: {value:?}"
41    ))]
42    InvalidFieldRename {
43        value: yaml_rust::Yaml,
44        #[snafu(implicit)]
45        location: Location,
46    },
47
48    #[snafu(display("Processor must be a map"))]
49    ProcessorMustBeMap {
50        #[snafu(implicit)]
51        location: Location,
52    },
53
54    #[snafu(display("Processor {processor}: missing field: {field}"))]
55    ProcessorMissingField {
56        processor: String,
57        field: String,
58        #[snafu(implicit)]
59        location: Location,
60    },
61
62    #[snafu(display("Processor {processor}: expect string value, but got {v:?}"))]
63    ProcessorExpectString {
64        processor: String,
65        v: vrl::value::Value,
66        #[snafu(implicit)]
67        location: Location,
68    },
69
70    #[snafu(display("Processor {processor}: unsupported value {val}"))]
71    ProcessorUnsupportedValue {
72        processor: String,
73        val: String,
74        #[snafu(implicit)]
75        location: Location,
76    },
77
78    #[snafu(display("Processor key must be a string"))]
79    ProcessorKeyMustBeString {
80        #[snafu(implicit)]
81        location: Location,
82    },
83
84    #[snafu(display("Processor {kind}: failed to parse {value}"))]
85    ProcessorFailedToParseString {
86        kind: String,
87        value: String,
88        #[snafu(implicit)]
89        location: Location,
90    },
91
92    #[snafu(display("Processor must have a string key"))]
93    ProcessorMustHaveStringKey {
94        #[snafu(implicit)]
95        location: Location,
96    },
97
98    #[snafu(display("Unsupported {processor} processor"))]
99    UnsupportedProcessor {
100        processor: String,
101        #[snafu(implicit)]
102        location: Location,
103    },
104
105    #[snafu(display("Field {field} must be a {ty}"))]
106    FieldMustBeType {
107        field: String,
108        ty: String,
109        #[snafu(implicit)]
110        location: Location,
111    },
112
113    #[snafu(display("Field parse from string failed: {field}"))]
114    FailedParseFieldFromString {
115        #[snafu(source)]
116        error: Box<dyn std::error::Error + Send + Sync>,
117        field: String,
118        #[snafu(implicit)]
119        location: Location,
120    },
121
122    #[snafu(display("Failed to parse {key} as int: {value}"))]
123    FailedToParseIntKey {
124        key: String,
125        value: String,
126        #[snafu(source)]
127        error: std::num::ParseIntError,
128        #[snafu(implicit)]
129        location: Location,
130    },
131
132    #[snafu(display("Failed to parse {value} to int"))]
133    FailedToParseInt {
134        value: String,
135        #[snafu(source)]
136        error: std::num::ParseIntError,
137        #[snafu(implicit)]
138        location: Location,
139    },
140    #[snafu(display("Failed to parse {key} as float: {value}"))]
141    FailedToParseFloatKey {
142        key: String,
143        value: String,
144        #[snafu(source)]
145        error: std::num::ParseFloatError,
146        #[snafu(implicit)]
147        location: Location,
148    },
149
150    #[snafu(display("Processor {kind}: {key} not found in intermediate keys"))]
151    IntermediateKeyIndex {
152        kind: String,
153        key: String,
154        #[snafu(implicit)]
155        location: Location,
156    },
157
158    #[snafu(display("Cmcd {k} missing value in {s}"))]
159    CmcdMissingValue {
160        k: String,
161        s: String,
162        #[snafu(implicit)]
163        location: Location,
164    },
165    #[snafu(display("Part: {part} missing key in {s}"))]
166    CmcdMissingKey {
167        part: String,
168        s: String,
169        #[snafu(implicit)]
170        location: Location,
171    },
172    #[snafu(display("Key must be a string, but got {k:?}"))]
173    KeyMustBeString {
174        k: yaml_rust::Yaml,
175        #[snafu(implicit)]
176        location: Location,
177    },
178
179    #[snafu(display("Csv read error"))]
180    CsvRead {
181        #[snafu(implicit)]
182        location: Location,
183        #[snafu(source)]
184        error: csv::Error,
185    },
186    #[snafu(display("Expected at least one record from csv format, but got none"))]
187    CsvNoRecord {
188        #[snafu(implicit)]
189        location: Location,
190    },
191
192    #[snafu(display("Separator '{separator}' must be a single character, but got '{value}'"))]
193    CsvSeparatorName {
194        separator: String,
195        value: String,
196        #[snafu(implicit)]
197        location: Location,
198    },
199
200    #[snafu(display("Quote '{quote}' must be a single character, but got '{value}'"))]
201    CsvQuoteName {
202        quote: String,
203        value: String,
204        #[snafu(implicit)]
205        location: Location,
206    },
207
208    #[snafu(display("Parse date timezone error {value}"))]
209    DateParseTimezone {
210        value: String,
211        #[snafu(source)]
212        error: chrono_tz::ParseError,
213        #[snafu(implicit)]
214        location: Location,
215    },
216
217    #[snafu(display("Parse date error {value}"))]
218    DateParse {
219        value: String,
220        #[snafu(source)]
221        error: chrono::ParseError,
222        #[snafu(implicit)]
223        location: Location,
224    },
225
226    #[snafu(display("Failed to get local timezone"))]
227    DateFailedToGetLocalTimezone {
228        #[snafu(implicit)]
229        location: Location,
230    },
231
232    #[snafu(display("Invalid Pattern: '{s}'. {detail}"))]
233    DissectInvalidPattern {
234        s: String,
235        detail: String,
236        #[snafu(implicit)]
237        location: Location,
238    },
239
240    #[snafu(display("Empty pattern is not allowed"))]
241    DissectEmptyPattern {
242        #[snafu(implicit)]
243        location: Location,
244    },
245    #[snafu(display("Split: '{split}' exceeds the input"))]
246    DissectSplitExceedsInput {
247        split: String,
248        #[snafu(implicit)]
249        location: Location,
250    },
251    #[snafu(display("Split: '{split}' does not match the input '{input}'"))]
252    DissectSplitNotMatchInput {
253        split: String,
254        input: String,
255        #[snafu(implicit)]
256        location: Location,
257    },
258    #[snafu(display("Consecutive names are not allowed: '{name1}' '{name2}'"))]
259    DissectConsecutiveNames {
260        name1: String,
261        name2: String,
262        #[snafu(implicit)]
263        location: Location,
264    },
265    #[snafu(display("No matching pattern found"))]
266    DissectNoMatchingPattern {
267        #[snafu(implicit)]
268        location: Location,
269    },
270    #[snafu(display("Modifier '{m}' already set, but found {modifier}"))]
271    DissectModifierAlreadySet {
272        m: String,
273        modifier: String,
274        #[snafu(implicit)]
275        location: Location,
276    },
277
278    #[snafu(display("Append Order modifier is already set to '{n}', cannot be set to {order}"))]
279    DissectAppendOrderAlreadySet {
280        n: String,
281        order: u32,
282        #[snafu(implicit)]
283        location: Location,
284    },
285    #[snafu(display("Order can only be set to Append Modifier, current modifier is {m}"))]
286    DissectOrderOnlyAppend {
287        m: String,
288        #[snafu(implicit)]
289        location: Location,
290    },
291
292    #[snafu(display("Order can only be set to Append Modifier"))]
293    DissectOrderOnlyAppendModifier {
294        #[snafu(implicit)]
295        location: Location,
296    },
297
298    #[snafu(display("End modifier already set: '{m}'"))]
299    DissectEndModifierAlreadySet {
300        m: String,
301        #[snafu(implicit)]
302        location: Location,
303    },
304    #[snafu(display("Invalid resolution: {resolution}"))]
305    EpochInvalidResolution {
306        resolution: String,
307        #[snafu(implicit)]
308        location: Location,
309    },
310    #[snafu(display("Pattern is required"))]
311    GsubPatternRequired {
312        #[snafu(implicit)]
313        location: Location,
314    },
315    #[snafu(display("Replacement is required"))]
316    GsubReplacementRequired {
317        #[snafu(implicit)]
318        location: Location,
319    },
320    #[snafu(display("Invalid regex pattern: {pattern}"))]
321    Regex {
322        #[snafu(source)]
323        error: regex::Error,
324        pattern: String,
325        #[snafu(implicit)]
326        location: Location,
327    },
328    #[snafu(display("Separator is required"))]
329    JoinSeparatorRequired {
330        #[snafu(implicit)]
331        location: Location,
332    },
333    #[snafu(display("Invalid method: {method}"))]
334    LetterInvalidMethod {
335        method: String,
336        #[snafu(implicit)]
337        location: Location,
338    },
339    #[snafu(display("No named group found in regex {origin}"))]
340    RegexNamedGroupNotFound {
341        origin: String,
342        #[snafu(implicit)]
343        location: Location,
344    },
345    #[snafu(display("No valid field found in {processor} processor"))]
346    RegexNoValidField {
347        processor: String,
348        #[snafu(implicit)]
349        location: Location,
350    },
351    #[snafu(display("No valid pattern found in {processor} processor"))]
352    RegexNoValidPattern {
353        processor: String,
354        #[snafu(implicit)]
355        location: Location,
356    },
357    #[snafu(display("Invalid method: {s}"))]
358    UrlEncodingInvalidMethod {
359        s: String,
360        #[snafu(implicit)]
361        location: Location,
362    },
363    #[snafu(display("Wrong digest pattern: {pattern}"))]
364    DigestPatternInvalid {
365        pattern: String,
366        #[snafu(implicit)]
367        location: Location,
368    },
369    #[snafu(display("Invalid transform on_failure value: {value}"))]
370    TransformOnFailureInvalidValue {
371        value: String,
372        #[snafu(implicit)]
373        location: Location,
374    },
375    #[snafu(display("Transform element must be a map"))]
376    TransformElementMustBeMap {
377        #[snafu(implicit)]
378        location: Location,
379    },
380    #[snafu(display("Transform fields must be set."))]
381    TransformFieldMustBeSet {
382        #[snafu(implicit)]
383        location: Location,
384    },
385    #[snafu(display("Transform {fields:?} type MUST BE set."))]
386    TransformTypeMustBeSet {
387        fields: String,
388        #[snafu(implicit)]
389        location: Location,
390    },
391    #[snafu(display("Column name must be unique, but got duplicated: {duplicates}"))]
392    TransformColumnNameMustBeUnique {
393        duplicates: String,
394        #[snafu(implicit)]
395        location: Location,
396    },
397    #[snafu(display(
398        "Illegal to set multiple timestamp Index columns, please set only one: {columns}"
399    ))]
400    TransformMultipleTimestampIndex {
401        columns: String,
402        #[snafu(implicit)]
403        location: Location,
404    },
405    #[snafu(display(
406        "Transform must have exactly one field specified as timestamp Index, but got {count}: {columns}"
407    ))]
408    TransformTimestampIndexCount {
409        count: usize,
410        columns: String,
411        #[snafu(implicit)]
412        location: Location,
413    },
414    #[snafu(display(
415        "Exactly one time-related processor and one timestamp value is required to use auto transform. `ignore_missing` can not be set to true."
416    ))]
417    AutoTransformOneTimestamp {
418        #[snafu(implicit)]
419        location: Location,
420    },
421    #[snafu(display("Invalid Pipeline doc version number: {}", version))]
422    InvalidVersionNumber {
423        version: String,
424        #[snafu(implicit)]
425        location: Location,
426    },
427    #[snafu(display("Type: {ty} value not supported for Epoch"))]
428    CoerceUnsupportedEpochType {
429        ty: String,
430        #[snafu(implicit)]
431        location: Location,
432    },
433    #[snafu(display("Failed to coerce string value '{s}' to type '{ty}'"))]
434    CoerceStringToType {
435        s: String,
436        ty: String,
437        #[snafu(implicit)]
438        location: Location,
439    },
440    #[snafu(display("Can not coerce json type to {ty}"))]
441    CoerceJsonTypeTo {
442        ty: String,
443        #[snafu(implicit)]
444        location: Location,
445    },
446    #[snafu(display(
447        "Can not coerce {ty} to json type. we only consider object and array to be json types."
448    ))]
449    CoerceTypeToJson {
450        ty: String,
451        #[snafu(implicit)]
452        location: Location,
453    },
454    #[snafu(display("Failed to coerce value: {msg}"))]
455    CoerceIncompatibleTypes {
456        msg: String,
457        #[snafu(implicit)]
458        location: Location,
459    },
460    #[snafu(display(
461        "Invalid resolution: '{resolution}'. Available resolutions: {valid_resolution}"
462    ))]
463    ValueInvalidResolution {
464        resolution: String,
465        valid_resolution: String,
466        #[snafu(implicit)]
467        location: Location,
468    },
469
470    #[snafu(display("Failed to parse type: '{t}'"))]
471    ValueParseType {
472        t: String,
473        #[snafu(implicit)]
474        location: Location,
475    },
476
477    #[snafu(display("Failed to parse {ty}: {v}"))]
478    ValueParseInt {
479        ty: String,
480        v: String,
481        #[snafu(source)]
482        error: std::num::ParseIntError,
483        #[snafu(implicit)]
484        location: Location,
485    },
486
487    #[snafu(display("Failed to parse {ty}: {v}"))]
488    ValueParseFloat {
489        ty: String,
490        v: String,
491        #[snafu(source)]
492        error: std::num::ParseFloatError,
493        #[snafu(implicit)]
494        location: Location,
495    },
496
497    #[snafu(display("Failed to parse {ty}: {v}"))]
498    ValueParseBoolean {
499        ty: String,
500        v: String,
501        #[snafu(source)]
502        error: std::str::ParseBoolError,
503        #[snafu(implicit)]
504        location: Location,
505    },
506    #[snafu(display("Default value not unsupported for type {value}"))]
507    ValueDefaultValueUnsupported {
508        value: String,
509        #[snafu(implicit)]
510        location: Location,
511    },
512
513    #[snafu(display("Unsupported yaml type: {value:?}"))]
514    ValueUnsupportedYamlType {
515        value: yaml_rust::Yaml,
516        #[snafu(implicit)]
517        location: Location,
518    },
519
520    #[snafu(display("key in Hash must be a string, but got {value:?}"))]
521    ValueYamlKeyMustBeString {
522        value: yaml_rust::Yaml,
523        #[snafu(implicit)]
524        location: Location,
525    },
526
527    #[snafu(display("Yaml load error."))]
528    YamlLoad {
529        #[snafu(source)]
530        error: yaml_rust::ScanError,
531        #[snafu(implicit)]
532        location: Location,
533    },
534    #[snafu(display("Yaml parse error."))]
535    YamlParse {
536        #[snafu(implicit)]
537        location: Location,
538    },
539    #[snafu(display("Column options error"))]
540    ColumnOptions {
541        #[snafu(source)]
542        source: api::error::Error,
543        #[snafu(implicit)]
544        location: Location,
545    },
546    #[snafu(display("Unsupported index type: {value}"))]
547    UnsupportedIndexType {
548        value: String,
549        #[snafu(implicit)]
550        location: Location,
551    },
552    #[snafu(display("Failed to parse json"))]
553    JsonParse {
554        #[snafu(source)]
555        error: serde_json::Error,
556        #[snafu(implicit)]
557        location: Location,
558    },
559    #[snafu(display(
560        "Column datatype mismatch. For column: {column}, expected datatype: {expected}, actual datatype: {actual}"
561    ))]
562    IdentifyPipelineColumnTypeMismatch {
563        column: String,
564        expected: String,
565        actual: String,
566        #[snafu(implicit)]
567        location: Location,
568    },
569    #[snafu(display("Parse json path error"))]
570    JsonPathParse {
571        #[snafu(implicit)]
572        location: Location,
573        #[snafu(source)]
574        error: jsonpath_rust::JsonPathParserError,
575    },
576    #[snafu(display("Json path result index not number"))]
577    JsonPathParseResultIndex {
578        #[snafu(implicit)]
579        location: Location,
580    },
581    #[snafu(display("Field is required for dispatcher"))]
582    FieldRequiredForDispatcher,
583    #[snafu(display("Table_suffix is required for dispatcher rule"))]
584    TableSuffixRequiredForDispatcherRule,
585    #[snafu(display("Value is required for dispatcher rule"))]
586    ValueRequiredForDispatcherRule,
587    #[snafu(display("Reached max nested levels when flattening JSON object: {max_nested_levels}"))]
588    ReachedMaxNestedLevels {
589        max_nested_levels: usize,
590        #[snafu(implicit)]
591        location: Location,
592    },
593
594    #[snafu(display("Pipeline table not found"))]
595    PipelineTableNotFound {
596        #[snafu(implicit)]
597        location: Location,
598    },
599
600    #[snafu(display("Failed to insert pipeline to pipelines table"))]
601    InsertPipeline {
602        #[snafu(source)]
603        source: operator::error::Error,
604        #[snafu(implicit)]
605        location: Location,
606    },
607
608    #[snafu(display("Pipeline not found, name: {}, version: {}", name, version.map(|ts| ts.0.to_iso8601_string()).unwrap_or("latest".to_string())))]
609    PipelineNotFound {
610        name: String,
611        version: Option<TimestampNanosecond>,
612        #[snafu(implicit)]
613        location: Location,
614    },
615
616    #[snafu(display(
617        "Multiple pipelines with different schemas found, but none under current schema. Please replicate one of them or delete until only one schema left. schemas: {}",
618        schemas
619    ))]
620    MultiPipelineWithDiffSchema {
621        schemas: String,
622        #[snafu(implicit)]
623        location: Location,
624    },
625
626    #[snafu(display(
627        "The return value's length of the record batch does not match, see debug log for details"
628    ))]
629    RecordBatchLenNotMatch {
630        #[snafu(implicit)]
631        location: Location,
632    },
633
634    #[snafu(display("Failed to collect record batch"))]
635    CollectRecords {
636        #[snafu(implicit)]
637        location: Location,
638        #[snafu(source)]
639        source: common_recordbatch::error::Error,
640    },
641
642    #[snafu(display("A valid table suffix template is required for tablesuffix section"))]
643    RequiredTableSuffixTemplate,
644
645    #[snafu(display("Invalid table suffix template, input: {}", input))]
646    InvalidTableSuffixTemplate {
647        input: String,
648        #[snafu(implicit)]
649        location: Location,
650    },
651
652    #[snafu(display("Failed to compile VRL, {}", msg))]
653    CompileVrl {
654        msg: String,
655        #[snafu(implicit)]
656        location: Location,
657    },
658
659    #[snafu(display("Failed to execute VRL, {}", msg))]
660    ExecuteVrl {
661        msg: String,
662        #[snafu(implicit)]
663        location: Location,
664    },
665    #[snafu(display("Invalid timestamp value: {}", input))]
666    InvalidTimestamp {
667        input: String,
668        #[snafu(implicit)]
669        location: Location,
670    },
671
672    #[snafu(display("Invalid epoch value '{}' for resolution '{}'", value, resolution))]
673    InvalidEpochForResolution {
674        value: i64,
675        resolution: String,
676        #[snafu(implicit)]
677        location: Location,
678    },
679    #[snafu(display("Please don't use regex in Vrl script"))]
680    VrlRegexValue {
681        #[snafu(implicit)]
682        location: Location,
683    },
684
685    #[snafu(display("Vrl script should return `.` in the end"))]
686    VrlReturnValue {
687        #[snafu(implicit)]
688        location: Location,
689    },
690
691    #[snafu(display("Failed to cast type, msg: {}", msg))]
692    CastType {
693        msg: String,
694        #[snafu(implicit)]
695        location: Location,
696    },
697
698    #[snafu(display("Top level value must be map"))]
699    ValueMustBeMap {
700        #[snafu(implicit)]
701        location: Location,
702    },
703
704    #[snafu(display("Failed to build DataFusion logical plan"))]
705    BuildDfLogicalPlan {
706        #[snafu(source)]
707        error: datafusion_common::DataFusionError,
708        #[snafu(implicit)]
709        location: Location,
710    },
711
712    #[snafu(display("Failed to execute internal statement"))]
713    ExecuteInternalStatement {
714        #[snafu(source)]
715        source: query::error::Error,
716        #[snafu(implicit)]
717        location: Location,
718    },
719
720    #[snafu(display("Failed to create dataframe"))]
721    DataFrame {
722        #[snafu(source)]
723        source: query::error::Error,
724        #[snafu(implicit)]
725        location: Location,
726    },
727
728    #[snafu(display("General catalog error"))]
729    Catalog {
730        #[snafu(source)]
731        source: catalog::error::Error,
732        #[snafu(implicit)]
733        location: Location,
734    },
735
736    #[snafu(display("Failed to create table"))]
737    CreateTable {
738        #[snafu(source)]
739        source: operator::error::Error,
740        #[snafu(implicit)]
741        location: Location,
742    },
743
744    #[snafu(display("Invalid pipeline version format: {}", version))]
745    InvalidPipelineVersion {
746        version: String,
747        #[snafu(implicit)]
748        location: Location,
749    },
750
751    #[snafu(display("Invalid custom time index config: {}, reason: {}", config, reason))]
752    InvalidCustomTimeIndex {
753        config: String,
754        reason: String,
755        #[snafu(implicit)]
756        location: Location,
757    },
758
759    #[snafu(display("Pipeline is required for this API."))]
760    PipelineMissing {
761        #[snafu(implicit)]
762        location: Location,
763    },
764
765    #[snafu(display("Time index must be non null."))]
766    TimeIndexMustBeNonNull {
767        #[snafu(implicit)]
768        location: Location,
769    },
770
771    #[snafu(display("Float is NaN"))]
772    FloatIsNan {
773        #[snafu(source)]
774        error: ordered_float::FloatIsNan,
775        #[snafu(implicit)]
776        location: Location,
777    },
778
779    #[snafu(display("Unsupported type in pipeline: {}", ty))]
780    UnsupportedTypeInPipeline {
781        ty: String,
782        #[snafu(implicit)]
783        location: Location,
784    },
785}
786
787pub type Result<T> = std::result::Result<T, Error>;
788
789impl ErrorExt for Error {
790    fn status_code(&self) -> StatusCode {
791        use Error::*;
792        match self {
793            CastType { .. } => StatusCode::Unexpected,
794            PipelineTableNotFound { .. } => StatusCode::TableNotFound,
795            InsertPipeline { source, .. } => source.status_code(),
796            CollectRecords { source, .. } => source.status_code(),
797            PipelineNotFound { .. }
798            | InvalidPipelineVersion { .. }
799            | InvalidCustomTimeIndex { .. }
800            | TimeIndexMustBeNonNull { .. } => StatusCode::InvalidArguments,
801            MultiPipelineWithDiffSchema { .. } | ValueMustBeMap { .. } => StatusCode::IllegalState,
802            BuildDfLogicalPlan { .. } | RecordBatchLenNotMatch { .. } => StatusCode::Internal,
803            ExecuteInternalStatement { source, .. } => source.status_code(),
804            DataFrame { source, .. } => source.status_code(),
805            Catalog { source, .. } => source.status_code(),
806            CreateTable { source, .. } => source.status_code(),
807
808            EmptyInputField { .. }
809            | MissingInputField { .. }
810            | InvalidFieldRename { .. }
811            | ProcessorMustBeMap { .. }
812            | ProcessorMissingField { .. }
813            | ProcessorExpectString { .. }
814            | ProcessorUnsupportedValue { .. }
815            | ProcessorKeyMustBeString { .. }
816            | ProcessorFailedToParseString { .. }
817            | ProcessorMustHaveStringKey { .. }
818            | UnsupportedProcessor { .. }
819            | FieldMustBeType { .. }
820            | FailedParseFieldFromString { .. }
821            | FailedToParseIntKey { .. }
822            | FailedToParseInt { .. }
823            | FailedToParseFloatKey { .. }
824            | IntermediateKeyIndex { .. }
825            | CmcdMissingValue { .. }
826            | CmcdMissingKey { .. }
827            | KeyMustBeString { .. }
828            | CsvRead { .. }
829            | CsvNoRecord { .. }
830            | CsvSeparatorName { .. }
831            | CsvQuoteName { .. }
832            | DateParseTimezone { .. }
833            | DateParse { .. }
834            | DateFailedToGetLocalTimezone { .. }
835            | DissectInvalidPattern { .. }
836            | DissectEmptyPattern { .. }
837            | DissectSplitExceedsInput { .. }
838            | DissectSplitNotMatchInput { .. }
839            | DissectConsecutiveNames { .. }
840            | DissectNoMatchingPattern { .. }
841            | DissectModifierAlreadySet { .. }
842            | DissectAppendOrderAlreadySet { .. }
843            | DissectOrderOnlyAppend { .. }
844            | DissectOrderOnlyAppendModifier { .. }
845            | DissectEndModifierAlreadySet { .. }
846            | EpochInvalidResolution { .. }
847            | GsubPatternRequired { .. }
848            | GsubReplacementRequired { .. }
849            | Regex { .. }
850            | JoinSeparatorRequired { .. }
851            | LetterInvalidMethod { .. }
852            | RegexNamedGroupNotFound { .. }
853            | RegexNoValidField { .. }
854            | RegexNoValidPattern { .. }
855            | UrlEncodingInvalidMethod { .. }
856            | DigestPatternInvalid { .. }
857            | TransformOnFailureInvalidValue { .. }
858            | TransformElementMustBeMap { .. }
859            | TransformFieldMustBeSet { .. }
860            | TransformTypeMustBeSet { .. }
861            | TransformColumnNameMustBeUnique { .. }
862            | TransformMultipleTimestampIndex { .. }
863            | TransformTimestampIndexCount { .. }
864            | AutoTransformOneTimestamp { .. }
865            | InvalidVersionNumber { .. }
866            | CoerceUnsupportedEpochType { .. }
867            | CoerceStringToType { .. }
868            | CoerceJsonTypeTo { .. }
869            | CoerceTypeToJson { .. }
870            | CoerceIncompatibleTypes { .. }
871            | ValueInvalidResolution { .. }
872            | ValueParseType { .. }
873            | ValueParseInt { .. }
874            | ValueParseFloat { .. }
875            | ValueParseBoolean { .. }
876            | ValueDefaultValueUnsupported { .. }
877            | ValueUnsupportedYamlType { .. }
878            | ValueYamlKeyMustBeString { .. }
879            | YamlLoad { .. }
880            | YamlParse { .. }
881            | ColumnOptions { .. }
882            | UnsupportedIndexType { .. }
883            | IdentifyPipelineColumnTypeMismatch { .. }
884            | JsonParse { .. }
885            | JsonPathParse { .. }
886            | JsonPathParseResultIndex { .. }
887            | FieldRequiredForDispatcher
888            | TableSuffixRequiredForDispatcherRule
889            | ValueRequiredForDispatcherRule
890            | ReachedMaxNestedLevels { .. }
891            | RequiredTableSuffixTemplate
892            | InvalidTableSuffixTemplate { .. }
893            | CompileVrl { .. }
894            | ExecuteVrl { .. }
895            | InvalidTimestamp { .. }
896            | VrlRegexValue { .. }
897            | VrlReturnValue { .. }
898            | PipelineMissing { .. } => StatusCode::InvalidArguments,
899
900            FloatIsNan { .. }
901            | InvalidEpochForResolution { .. }
902            | UnsupportedTypeInPipeline { .. } => StatusCode::InvalidArguments,
903        }
904    }
905
906    fn as_any(&self) -> &dyn Any {
907        self
908    }
909}