use crate::result_set::{MySqlColumn, MySqlTypeInfo};
use either::Either;
use std::convert::identity;
#[derive(Debug)]
#[doc(hidden)]
pub struct Describe {
pub(crate) columns: Vec<MySqlColumn>,
pub(crate) parameters: Option<Either<Vec<MySqlTypeInfo>, usize>>,
pub(crate) nullable: Vec<Option<bool>>,
}
impl Describe {
pub fn columns(&self) -> &[MySqlColumn] {
&self.columns
}
pub fn column(&self, index: usize) -> &MySqlColumn {
&self.columns[index]
}
pub fn parameters(&self) -> Option<Either<&[MySqlTypeInfo], usize>> {
self.parameters.as_ref().map(|p| match p {
Either::Left(params) => Either::Left(&**params),
Either::Right(count) => Either::Right(*count),
})
}
pub fn nullable(&self, column: usize) -> Option<bool> {
self.nullable.get(column).copied().and_then(identity)
}
}