use std::fmt::Debug;
use serde::de::DeserializeOwned;
use serde::{Deserialize, Serialize};
use crate::ast::{CopyOption, CopyToTarget, DataType, ObjectReference, ShowReference};
pub trait AstMeta: Clone {
type ItemReference: Debug + Clone + PartialEq + Serialize + DeserializeOwned;
type TableReference: Debug + Clone + PartialEq + Serialize + DeserializeOwned;
type TableFunctionReference: Debug + Clone + PartialEq + Serialize + DeserializeOwned;
type FunctionReference: Debug + Clone + PartialEq + Serialize + DeserializeOwned;
type SubqueryOptions: Debug + Clone + PartialEq + Serialize + DeserializeOwned;
type DataType: Debug + Clone + PartialEq + Serialize + DeserializeOwned;
type CopyToDestination: Debug + Clone + PartialEq + Serialize + DeserializeOwned;
type CopyToOptions: Debug + Clone + PartialEq + Serialize + DeserializeOwned;
type ShowReference: Debug + Clone + PartialEq + Serialize + DeserializeOwned;
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub struct Raw;
impl AstMeta for Raw {
type ItemReference = ObjectReference;
type TableReference = ObjectReference;
type TableFunctionReference = ObjectReference;
type FunctionReference = ObjectReference;
type SubqueryOptions = ();
type DataType = DataType;
type CopyToDestination = CopyToTarget;
type CopyToOptions = Vec<CopyOption<Raw>>;
type ShowReference = ShowReference;
}