geam_core/planner/
error.rs1use 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}