1use miette::Diagnostic;
4use thiserror::Error;
5
6pub type ImportResult<T> = Result<T, ImportError>;
8
9#[derive(Error, Debug, Diagnostic)]
11pub enum ImportError {
12 #[error("Failed to parse Prisma schema: {0}")]
14 #[diagnostic(code(prax_import::prisma::parse_error))]
15 PrismaParseError(String),
16
17 #[error("Failed to parse Diesel schema: {0}")]
19 #[diagnostic(code(prax_import::diesel::parse_error))]
20 DieselParseError(String),
21
22 #[error("Unsupported feature in schema: {0}")]
24 #[diagnostic(code(prax_import::unsupported_feature))]
25 UnsupportedFeature(String),
26
27 #[error("Failed to convert type: {0}")]
29 #[diagnostic(code(prax_import::type_conversion_error))]
30 TypeConversionError(String),
31
32 #[error("Invalid relation: {0}")]
34 #[diagnostic(code(prax_import::invalid_relation))]
35 InvalidRelation(String),
36
37 #[error("File I/O error: {0}")]
39 #[diagnostic(code(prax_import::io_error))]
40 IoError(#[from] std::io::Error),
41
42 #[error("Schema error: {0}")]
44 #[diagnostic(code(prax_import::schema_error))]
45 SchemaError(#[from] prax_schema::SchemaError),
46
47 #[error("Invalid configuration: {0}")]
49 #[diagnostic(code(prax_import::invalid_config))]
50 InvalidConfig(String),
51
52 #[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 #[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 #[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 #[error("no .prisma files found under `{}`", .path.display())]
80 #[diagnostic(code(prax_import::prisma::empty_directory))]
81 EmptyPrismaDirectory { path: std::path::PathBuf },
82}