1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
//! Async sink of time-series data based on serde-rs
//!
//! Example
//! --------
//!
//! ```rust
//! extern crate asink;
//! extern crate serde;
//! #[macro_use]
//! extern crate serde_derive;
//!
//! use asink::*;
//! use std::sync::mpsc::Sender;
//!
//! /// This will be serialized into msgpack
//! #[derive(Serialize)]
//! struct Doc {
//! id: usize,
//! data: Vec<f64>,
//! }
//!
//! fn experiment(s: Sender<Doc>) {
//! for i in 0..5 {
//! let doc = Doc {
//! id: i,
//! data: vec![i as f64],
//! };
//! s.send(doc).unwrap(); // Send data to sink
//! }
//! }
//!
//! fn main() {
//! let sink = msgpack::MsgpackSink::from_str("test.msg");
//! let (s, th) = sink.run(); // Sink start thread to write recieved data into msgpack
//! experiment(s);
//! th.join().unwrap();
//! }
//! ```
extern crate bson;
#[macro_use]
extern crate derive_new;
extern crate mongodb;
extern crate rmp;
extern crate rmp_serde;
extern crate serde;
extern crate serde_json;
use serde::Serialize;
use std::thread::JoinHandle;
use std::sync::mpsc::Sender;
pub mod mongo;
pub mod msgpack;
pub mod json;
/// Sink trait for storing time-series data
pub trait Sink<Document: Send + Serialize> {
/// Start a thread for sink
fn run(self) -> (Sender<Document>, JoinHandle<()>);
}