use miette::Diagnostic;
use thiserror::Error;
pub type ImportResult<T> = Result<T, ImportError>;
#[derive(Error, Debug, Diagnostic)]
pub enum ImportError {
#[error("Failed to parse Prisma schema: {0}")]
#[diagnostic(code(prax_import::prisma::parse_error))]
PrismaParseError(String),
#[error("Failed to parse Diesel schema: {0}")]
#[diagnostic(code(prax_import::diesel::parse_error))]
DieselParseError(String),
#[error("Unsupported feature in schema: {0}")]
#[diagnostic(code(prax_import::unsupported_feature))]
UnsupportedFeature(String),
#[error("Failed to convert type: {0}")]
#[diagnostic(code(prax_import::type_conversion_error))]
TypeConversionError(String),
#[error("Invalid relation: {0}")]
#[diagnostic(code(prax_import::invalid_relation))]
InvalidRelation(String),
#[error("File I/O error: {0}")]
#[diagnostic(code(prax_import::io_error))]
IoError(#[from] std::io::Error),
#[error("Schema error: {0}")]
#[diagnostic(code(prax_import::schema_error))]
SchemaError(#[from] prax_schema::SchemaError),
#[error("Invalid configuration: {0}")]
#[diagnostic(code(prax_import::invalid_config))]
InvalidConfig(String),
#[error("duplicate prisma model `{name}` across files (source {} vs {})", .first.0, .second.0)]
#[diagnostic(code(prax_import::prisma::duplicate_model))]
DuplicatePrismaModel {
name: String,
first: crate::prisma::types::PrismaSourceId,
second: crate::prisma::types::PrismaSourceId,
},
#[error("duplicate prisma enum `{name}` across files (source {} vs {})", .first.0, .second.0)]
#[diagnostic(code(prax_import::prisma::duplicate_enum))]
DuplicatePrismaEnum {
name: String,
first: crate::prisma::types::PrismaSourceId,
second: crate::prisma::types::PrismaSourceId,
},
#[error("multiple datasource blocks across prisma files (source {} vs {})", .first.0, .second.0)]
#[diagnostic(code(prax_import::prisma::multiple_datasource))]
MultiplePrismaDatasource {
first: crate::prisma::types::PrismaSourceId,
second: crate::prisma::types::PrismaSourceId,
},
#[error("no .prisma files found under `{}`", .path.display())]
#[diagnostic(code(prax_import::prisma::empty_directory))]
EmptyPrismaDirectory { path: std::path::PathBuf },
}