use thiserror::Error;
use crate::operation::error::PlainValueError;
#[derive(Error, Debug)]
pub enum ValidationError {
#[error("missing required field: '{0}' of type {1}")]
MissingField(String, String),
#[error("unexpected fields found: {0}")]
UnexpectedFields(String),
#[error("field '{0}' does not match schema: {1}")]
InvalidField(String, String),
#[error("expected field name '{1}'")]
InvalidName(String, String),
#[error("invalid field type '{0}', expected '{1}'")]
InvalidType(String, String),
#[error("{0}")]
InvalidValue(String),
#[error("non-canonic document view id, {0}")]
InvalidDocumentViewId(String),
#[error("invalid 'schema_definition_v1' operation: {0}")]
InvalidSchemaDefinition(#[from] SchemaDefinitionError),
#[error("invalid 'schema_field_definition_v1' operation: {0}")]
InvalidSchemaFieldDefinition(#[from] SchemaFieldDefinitionError),
#[error(transparent)]
NotStringValue(#[from] PlainValueError),
#[error("invalid 'blob_v1' operation: {0}")]
InvalidBlob(#[from] BlobError),
#[error("invalid 'blob_piece_v1' operation: {0}")]
InvalidBlobPiece(#[from] BlobPieceError),
}
#[derive(Error, Debug)]
#[allow(missing_copy_implementations)]
pub enum SchemaFieldDefinitionError {
#[error("'name' field in schema field definitions is wrongly formatted")]
NameInvalid,
#[error("'type' field in schema field definitions is wrongly formatted")]
TypeInvalid,
#[error(transparent)]
NotStringValue(#[from] PlainValueError),
}
#[derive(Error, Debug)]
#[allow(missing_copy_implementations)]
pub enum SchemaDefinitionError {
#[error("'name' field in schema field definitions is wrongly formatted")]
NameInvalid,
#[error("'description' field in schema field definitions is wrongly formatted")]
DescriptionInvalid,
#[error("'fields' field in schema field definitions is wrongly formatted")]
FieldsInvalid,
#[error(transparent)]
NotStringValue(#[from] PlainValueError),
}
#[derive(Error, Debug)]
#[allow(missing_copy_implementations)]
pub enum BlobError {
#[error("'mime_type' field in blob is wrongly formatted")]
MimeTypeInvalid,
#[error("'pieces' field can not be empty")]
PiecesEmpty,
}
#[derive(Error, Debug)]
#[allow(missing_copy_implementations)]
pub enum BlobPieceError {
#[error("'data' field in blob is over maximum allowed length")]
DataInvalid,
}