mongodb 0.9.1

The official MongoDB driver for Rust (currently in alpha)
Documentation
use std::net::TcpStream;

use bson::{bson, doc, Bson};

use super::message::{Message, MessageFlags, MessageSection};
use crate::{
    options::StreamAddress,
    test::{CLIENT_OPTIONS, LOCK},
};

#[test]
fn basic() {
    if CLIENT_OPTIONS.tls_options().is_some() {
        return;
    }

    let _guard = LOCK.run_concurrently();

    let message = Message {
        response_to: 0,
        flags: MessageFlags::empty(),
        sections: vec![MessageSection::Document(
            doc! { "isMaster": 1, "$db": "admin" },
        )],
        checksum: None,
        request_id: None,
    };

    let StreamAddress { ref hostname, port } = CLIENT_OPTIONS.hosts[0];

    let mut stream = TcpStream::connect((&hostname[..], port.unwrap_or(27017))).unwrap();
    message.write_to(&mut stream).unwrap();

    let reply = Message::read_from(&mut stream).unwrap();

    let response_doc = match reply.sections.into_iter().next().unwrap() {
        MessageSection::Document(doc) => doc,
        MessageSection::Sequence { documents, .. } => documents.into_iter().next().unwrap(),
    };

    assert_eq!(response_doc.get("ok"), Some(&Bson::FloatingPoint(1.0)));
}