use crate::ast::types::SQLExpression;

use serde::{Deserialize, Serialize};

#[derive(Deserialize, Serialize, Clone, Debug, PartialEq)]
pub struct OrderByClause {
    pub order_by_items: Vec<OrderByItem>,
}

#[derive(Deserialize, Serialize, Clone, Debug, PartialEq)]
pub struct OrderByItem {
    pub item: SQLExpression,
    pub order_type: OrderByType,
    pub nulls: OrderByNulls,
}

#[derive(Deserialize, Serialize, Clone, Debug, PartialEq, Eq)]
pub enum OrderByType {
    Asc,
    Desc,
}

#[derive(Deserialize, Serialize, Clone, Debug, PartialEq, Eq)]
pub enum OrderByNulls {
    First,
    Last,
}