dbq 0.1.0

Job queueing and processing library with queues stored in Postgres 9.5+
Documentation
#[cfg(feature = "integration_tests")]
extern crate dbq;

#[cfg(feature = "integration_tests")]
mod integration {
    mod queue;
    mod worker;

    use postgres::params::{Builder, ConnectParams, Host};
    use postgres::{Connection, GenericConnection, TlsMode};
    use serde_json::Value;
    use std::time::Duration;

    pub fn init() -> dbq::SchemaConfig {
        let _ = env_logger::try_init();
        let schema_config = dbq::SchemaConfig::default();
        let conn = Connection::connect(db_connect_params(), TlsMode::None).unwrap();
        dbq::run_migrations(&schema_config, &conn, Some(646_271)).unwrap();
        schema_config
    }

    pub fn db_connect_params() -> ConnectParams {
        let mut builder = Builder::new();
        builder.user("postgres", Some("password"));
        builder.database("dbq");
        builder.connect_timeout(Some(Duration::new(10, 0)));
        let host = std::env::var("DBQ_POSTGRES_HOST")
            .ok()
            .unwrap_or("localhost".to_string());
        builder.build(Host::Tcp(host))
    }

    pub fn db_conn() -> Connection {
        let conn = Connection::connect(db_connect_params(), TlsMode::None).unwrap();
        conn
    }

    pub fn enqueue_test_job<C: GenericConnection>(
        queue: &dbq::Queue,
        max_attempts: u32,
        conn: &C,
    ) -> u64 {
        let args = r#"
            {
                "id": 1,
                "message": "hello"
            }"#;
        let v: Value = serde_json::from_str(args).unwrap();
        queue.enqueue("foo", &v, max_attempts, conn).unwrap()
    }
}