fluidattacks-database-core-domain 0.1.0

Database core functional core: database-agnostic table identifiers and types (no I/O)
Documentation
use core::fmt;

use crate::core::ColumnId;

#[derive(Debug, Clone, PartialEq, Eq)]
pub enum SchemaError {
    NoColumns,
    DuplicateColumn(ColumnId),
    UnknownKeyColumn(ColumnId),
    DuplicateKeyColumn(ColumnId),
    NullableKeyColumn(ColumnId),
    InvalidDecimal {
        column: ColumnId,
        precision: u8,
        scale: u8,
    },
}

impl fmt::Display for SchemaError {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        match self {
            Self::NoColumns => write!(f, "table has no columns"),
            Self::DuplicateColumn(c) => write!(f, "column {} is repeated", c.name()),
            Self::UnknownKeyColumn(c) => write!(f, "key column {} is not a column", c.name()),
            Self::DuplicateKeyColumn(c) => write!(f, "key column {} is repeated", c.name()),
            Self::NullableKeyColumn(c) => write!(f, "key column {} is nullable", c.name()),
            Self::InvalidDecimal {
                column,
                precision,
                scale,
            } => write!(
                f,
                "column {} has an invalid decimal({precision},{scale})",
                column.name()
            ),
        }
    }
}

impl core::error::Error for SchemaError {}