Skip to main content

geam_core/planner/
error.rs

1use ecow::EcoString;
2use thiserror::Error;
3
4mod host;
5mod invalid;
6mod unsupported;
7
8pub use host::{ExternalTypeProviderLinkReason, HostProviderLinkReason};
9pub use invalid::{
10    InvalidBitArraySegmentOptionsReason, InvalidCallShapeReason, InvalidCaseShapeReason,
11    InvalidCustomTypeReason, InvalidExpressionShapeKind, InvalidExpressionType,
12    InvalidFunctionShapeReason, InvalidModuleReferenceReason, InvalidPatternShapeReason,
13    InvalidPipelineShapeReason, InvalidRecordUpdateShapeReason, InvalidTypedAstReason,
14    InvalidUseShapeReason, PatternKind, RecordUpdateArgumentOrigin,
15};
16pub use unsupported::{
17    UnsupportedBitArraySegmentReason, UnsupportedFunctionReason, UnsupportedPatternKind,
18    UnsupportedTopLevelKind,
19};
20
21#[derive(Debug, Error, Clone, PartialEq, Eq)]
22pub enum PlanError {
23    #[error("external type provider {package}::{module}.{type_}: {reason}")]
24    ExternalTypeProviderLink {
25        package: EcoString,
26        module: EcoString,
27        type_: EcoString,
28        reason: Box<ExternalTypeProviderLinkReason>,
29    },
30
31    #[error("host provider {package}::{module}.{function}: {reason}")]
32    HostProviderLink {
33        package: EcoString,
34        module: EcoString,
35        function: EcoString,
36        reason: Box<HostProviderLinkReason>,
37    },
38
39    #[error("external function {package}::{module}.{function} has no host provider or Gleam body")]
40    MissingHostProvider {
41        package: EcoString,
42        module: EcoString,
43        function: EcoString,
44    },
45
46    #[error("unsupported top-level definition: {kind}")]
47    UnsupportedTopLevel { kind: UnsupportedTopLevelKind },
48
49    #[error("unsupported function {name}: {reason}")]
50    UnsupportedFunction {
51        name: EcoString,
52        reason: UnsupportedFunctionReason,
53    },
54
55    #[error("unsupported pattern: {kind}")]
56    UnsupportedPattern { kind: UnsupportedPatternKind },
57
58    #[error("unsupported bit array segment: {reason}")]
59    UnsupportedBitArraySegment {
60        reason: UnsupportedBitArraySegmentReason,
61    },
62
63    #[error("invalid Gleam typed AST: {reason}")]
64    InvalidTypedAst { reason: InvalidTypedAstReason },
65}