#![recursion_limit = "1024"]
#![cfg_attr(feature = "nightly", feature(test, const_fn))]
#[cfg(feature = "nightly")]
extern crate test;
pub use mysql_common::{chrono, constants as consts, params, time, uuid};
#[macro_use]
mod macros;
mod conn;
mod connection_like;
pub mod error;
mod io;
mod local_infile_handler;
mod opts;
mod queryable;
pub type BoxFuture<T> = Box<dyn ::futures::Future<Item = T, Error = error::Error> + Send + 'static>;
pub trait MyFuture<T>: ::futures::Future<Item = T, Error = error::Error> + Send + 'static {}
impl<T, U> MyFuture<T> for U where
U: ::futures::Future<Item = T, Error = error::Error> + Send + 'static
{
}
#[doc(inline)]
pub use self::conn::Conn;
#[doc(inline)]
pub use self::conn::pool::Pool;
#[doc(inline)]
pub use self::queryable::transaction::IsolationLevel;
#[doc(inline)]
pub use self::opts::{Opts, OptsBuilder, PoolConstraints, SslOpts};
#[doc(inline)]
pub use self::local_infile_handler::builtin::WhiteListFsLocalInfileHandler;
#[doc(inline)]
pub use mysql_common::packets::Column;
#[doc(inline)]
pub use mysql_common::row::Row;
#[doc(inline)]
pub use mysql_common::params::Params;
#[doc(inline)]
pub use mysql_common::value::Value;
#[doc(inline)]
pub use mysql_common::row::convert::{from_row, from_row_opt, FromRowError};
#[doc(inline)]
pub use mysql_common::value::convert::{from_value, from_value_opt, FromValueError};
#[doc(inline)]
pub use mysql_common::value::json::{Deserialized, Serialized};
#[doc(inline)]
pub use self::queryable::query_result::QueryResult;
#[doc(inline)]
pub use self::queryable::transaction::{Transaction, TransactionOptions};
#[doc(inline)]
pub use self::queryable::{BinaryProtocol, TextProtocol};
#[doc(inline)]
pub use self::queryable::stmt::Stmt;
pub mod futures {
pub use crate::conn::pool::futures::{DisconnectPool, GetConn};
pub use crate::queryable::query_result::{
ForEach, ForEachAndDrop, Map, MapAndDrop, Reduce, ReduceAndDrop,
};
}
pub mod prelude {
#[doc(inline)]
pub use crate::local_infile_handler::LocalInfileHandler;
#[doc(inline)]
pub use crate::queryable::Queryable;
#[doc(inline)]
pub use mysql_common::row::convert::FromRow;
#[doc(inline)]
pub use mysql_common::value::convert::{ConvIr, FromValue, ToValue};
pub trait ConnectionLike: crate::connection_like::ConnectionLike {}
impl<T: crate::connection_like::ConnectionLike> ConnectionLike for T {}
pub trait Protocol: crate::queryable::Protocol {}
impl<T: crate::queryable::Protocol> Protocol for T {}
}
#[cfg(test)]
mod test_misc {
use lazy_static::lazy_static;
use std::env;
use crate::opts;
#[allow(dead_code)]
fn error_should_implement_send_and_sync() {
fn _dummy<T: Send + Sync>(_: T) {}
_dummy(crate::error::Error::from("foo"));
}
lazy_static! {
pub static ref DATABASE_URL: String = {
if let Ok(url) = env::var("DATABASE_URL") {
let opts = opts::Opts::from_url(&url).expect("DATABASE_URL invalid");
if opts
.get_db_name()
.expect("a database name is required")
.is_empty()
{
panic!("database name is empty");
}
url
} else {
"mysql://root:password@127.0.0.1:3307/mysql".into()
}
};
}
}