//! A pure-Rust LDAP library using the Tokio stack.
//!
//! ## Usage
//!
//! In `Cargo.toml`:
//!
//! ```toml
//! [dependencies.ldap3]
//! version = "0.5"
//! ```
//!
//! In the crate root (`src/lib.rs` or `src/main.rs`):
//!
//! ```
//! extern crate ldap3;
//! ```
//! ## Summary
//!
//! The library provides both synchronous and asynchronous interfaces. The [`LdapConn`]
//! (struct.LdapConn.html) structure is the starting point for all synchronous operations.
//! [`LdapConnAsync`](struct.LdapConnAsync) is its asynchronous analogue, and [`Ldap`](struct.Ldap) is
//! the low-level asynchronous connection handle used by both.
//!
//! In the [struct list](#structs), async-related structs have an asterisk (__*__) after
//! the short description.
//!
//! Since the library is still in development, none of the interfaces should be considered
//! stable. If a breaking change of some component is planned, it will be noted in the
//! documentation with a bolded __Note__, and a link to the GitHub issue discussing the
//! change, if applicable. General, crate-level issues with the documentation can be
//! discussed [here](https://github.com/inejge/ldap3/issues/3).
//!
//! The documentation is written for readers familiar with LDAP concepts and terminology,
//! which it won't attempt to explain.
//!
//! ## Examples
//!
//! The following two examples perform exactly the same operation and should produce identical
//! results. They should be run against the example server in the `data` subdirectory of the crate source.
//! Other sample programs expecting the same server setup can be found in the `examples` subdirectory.
//!
//! ### Synchronous search
//!
//! ```rust,no_run
//! extern crate ldap3;
//!
//! use std::error::Error;
//!
//! use ldap3::{LdapConn, Scope, SearchEntry};
//!
//! fn main() {
//! match do_search() {
//! Ok(_) => (),
//! Err(e) => println!("{}", e),
//! }
//! }
//!
//! fn do_search() -> Result<(), Box<Error>> {
//! let ldap = LdapConn::new("ldap://localhost:2389")?;
//! let (rs, _res) = ldap.search(
//! "ou=Places,dc=example,dc=org",
//! Scope::Subtree,
//! "(&(objectClass=locality)(l=ma*))",
//! vec!["l"]
//! )?.success()?;
//! for entry in rs {
//! println!("{:?}", SearchEntry::construct(entry));
//! }
//! Ok(())
//! }
//! ```
//!
//! ### Asynchronous search
//!
//! ```rust,no_run
//! extern crate futures;
//! extern crate ldap3;
//! extern crate tokio_core;
//!
//! use std::error::Error;
//!
//! use futures::Future;
//! use ldap3::{LdapConnAsync, Scope, SearchEntry};
//! use tokio_core::reactor::Core;
//!
//! fn main() {
//! match do_search() {
//! Ok(_) => (),
//! Err(e) => println!("{}", e),
//! }
//! }
//!
//! fn do_search() -> Result<(), Box<Error>> {
//! let mut core = Core::new()?;
//! let handle = core.handle();
//! let ldap = LdapConnAsync::new("ldap://localhost:2389", &handle)?;
//! let srch = ldap.and_then(|ldap|
//! ldap.search(
//! "ou=Places,dc=example,dc=org",
//! Scope::Subtree,
//! "(&(objectClass=locality)(l=ma*))",
//! vec!["l"]
//! ))
//! .and_then(|response| response.success())
//! .and_then(|(rs, _res)| Ok(rs));
//! let rs = core.run(srch)?;
//! for entry in rs {
//! println!("{:?}", SearchEntry::construct(entry));
//! }
//! Ok(())
//! }
//! ```
extern crate bytes;
extern crate byteorder;
extern crate futures;
extern crate lazy_static;
extern crate lber;
extern crate log;
extern crate native_tls;
extern crate nom;
extern crate tokio_core;
extern crate tokio_io;
extern crate tokio_proto;
extern crate tokio_service;
extern crate tokio_tls;
extern crate tokio_uds;
extern crate tokio_uds_proto;
extern crate url;
pub use ;
pub use parse as parse_filter;
pub use Ldap;
pub use Mod;
pub use LdapResult;
pub use ;
pub use ;