Skip to main content

prax_import/
error.rs

1//! Error types for schema import operations.
2
3use miette::Diagnostic;
4use thiserror::Error;
5
6/// Result type for import operations.
7pub type ImportResult<T> = Result<T, ImportError>;
8
9/// Errors that can occur during schema import.
10#[derive(Error, Debug, Diagnostic)]
11pub enum ImportError {
12    /// Failed to parse Prisma schema.
13    #[error("Failed to parse Prisma schema: {0}")]
14    #[diagnostic(code(prax_import::prisma::parse_error))]
15    PrismaParseError(String),
16
17    /// Failed to parse Diesel schema.
18    #[error("Failed to parse Diesel schema: {0}")]
19    #[diagnostic(code(prax_import::diesel::parse_error))]
20    DieselParseError(String),
21
22    /// Unsupported feature in source schema.
23    #[error("Unsupported feature in schema: {0}")]
24    #[diagnostic(code(prax_import::unsupported_feature))]
25    UnsupportedFeature(String),
26
27    /// Failed to convert type.
28    #[error("Failed to convert type: {0}")]
29    #[diagnostic(code(prax_import::type_conversion_error))]
30    TypeConversionError(String),
31
32    /// Invalid relation definition.
33    #[error("Invalid relation: {0}")]
34    #[diagnostic(code(prax_import::invalid_relation))]
35    InvalidRelation(String),
36
37    /// File I/O error.
38    #[error("File I/O error: {0}")]
39    #[diagnostic(code(prax_import::io_error))]
40    IoError(#[from] std::io::Error),
41
42    /// Schema error from prax-schema.
43    #[error("Schema error: {0}")]
44    #[diagnostic(code(prax_import::schema_error))]
45    SchemaError(#[from] prax_schema::SchemaError),
46
47    /// Invalid configuration.
48    #[error("Invalid configuration: {0}")]
49    #[diagnostic(code(prax_import::invalid_config))]
50    InvalidConfig(String),
51
52    /// Duplicate Prisma model across files in a multi-file directory.
53    #[error("duplicate prisma model `{name}` across files (source {} vs {})", .first.0, .second.0)]
54    #[diagnostic(code(prax_import::prisma::duplicate_model))]
55    DuplicatePrismaModel {
56        name: String,
57        first: crate::prisma::types::PrismaSourceId,
58        second: crate::prisma::types::PrismaSourceId,
59    },
60
61    /// Duplicate Prisma enum across files.
62    #[error("duplicate prisma enum `{name}` across files (source {} vs {})", .first.0, .second.0)]
63    #[diagnostic(code(prax_import::prisma::duplicate_enum))]
64    DuplicatePrismaEnum {
65        name: String,
66        first: crate::prisma::types::PrismaSourceId,
67        second: crate::prisma::types::PrismaSourceId,
68    },
69
70    /// Multiple datasource blocks across Prisma files.
71    #[error("multiple datasource blocks across prisma files (source {} vs {})", .first.0, .second.0)]
72    #[diagnostic(code(prax_import::prisma::multiple_datasource))]
73    MultiplePrismaDatasource {
74        first: crate::prisma::types::PrismaSourceId,
75        second: crate::prisma::types::PrismaSourceId,
76    },
77
78    /// Multi-file Prisma input directory contained no `*.prisma` files.
79    #[error("no .prisma files found under `{}`", .path.display())]
80    #[diagnostic(code(prax_import::prisma::empty_directory))]
81    EmptyPrismaDirectory { path: std::path::PathBuf },
82}