This commit is contained in:
Diggory Blake 2021-03-29 22:33:07 +01:00
parent 37f70afa33
commit 23010c9512
4 changed files with 140 additions and 5 deletions

24
.github/workflows/publish.yml vendored Normal file
View file

@ -0,0 +1,24 @@
on:
release:
types: [published]
name: Publish
jobs:
release:
name: Release
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: stable
override: true
- uses: actions-rs/cargo@v1
with:
command: login
args: -- ${{secrets.CARGO_TOKEN}}
- uses: actions-rs/cargo@v1
with:
command: publish

78
.github/workflows/toolchain.yml vendored Normal file
View file

@ -0,0 +1,78 @@
on: [push, pull_request]
name: CI
jobs:
check:
name: Check
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: stable
override: true
- uses: actions-rs/cargo@v1
with:
command: check
fmt:
name: Rustfmt
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: stable
override: true
- run: rustup component add rustfmt
- uses: actions-rs/cargo@v1
with:
command: fmt
args: -- --check
clippy:
name: Clippy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: stable
override: true
- run: rustup component add clippy
- uses: actions-rs/cargo@v1
with:
command: clippy
args: -- -D warnings
test:
name: Test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: stable
override: true
- uses: actions-rs/cargo@v1
with:
command: test
test_nightly:
name: Test (Nightly)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: nightly
override: true
- uses: actions-rs/cargo@v1
with:
command: test

View file

@ -3,6 +3,10 @@ name = "sqlxmq"
version = "0.1.0"
authors = ["Diggory Blake <diggsey@googlemail.com>"]
edition = "2018"
license = "MIT OR Apache-2.0"
repository = "https://github.com/Diggsey/sqlxmq"
description = "A reliable job queue using PostgreSQL as a backing store"
readme = "README.md"
[workspace]
members = ["sqlxmq_macros"]
@ -12,13 +16,12 @@ members = ["sqlxmq_macros"]
[dependencies]
sqlx = { version = "0.5.1", features = [
"postgres",
"runtime-async-std-native-tls",
"runtime-tokio-native-tls",
"chrono",
"uuid",
] }
tokio = { version = "1.3.0", features = ["full"] }
dotenv = "0.15.0"
futures = "0.3.13"
chrono = "0.4.19"
uuid = { version = "0.8.2", features = ["v4"] }
log = "0.4.14"
@ -29,3 +32,4 @@ sqlxmq_macros = { version = "0.1", path = "sqlxmq_macros" }
[dev-dependencies]
dotenv = "0.15.0"
pretty_env_logger = "0.4.0"
futures = "0.3.13"

View file

@ -110,13 +110,15 @@
//! The first step is to define a function to be run on the job queue.
//!
//! ```rust
//! use std::error::Error;
//!
//! use sqlxmq::{job, CurrentJob};
//!
//! // Arguments to the `#[job]` attribute allow setting default job options.
//! #[job(channel_name = "foo")]
//! async fn example_job(
//! mut current_job: CurrentJob,
//! ) -> sqlx::Result<()> {
//! ) -> Result<(), Box<dyn Error + Send + Sync + 'static>> {
//! // Decode a JSON payload
//! let who: Option<String> = current_job.json()?;
//!
@ -135,9 +137,22 @@
//! Next we need to create a job runner: this is what listens for new jobs
//! and executes them.
//!
//! ```rust
//! ```rust,no_run
//! use std::error::Error;
//!
//! use sqlxmq::JobRegistry;
//!
//! # use sqlxmq::{job, CurrentJob};
//! #
//! # #[job]
//! # async fn example_job(
//! # current_job: CurrentJob,
//! # ) -> Result<(), Box<dyn Error + Send + Sync + 'static>> { Ok(()) }
//! #
//! # async fn connect_to_db() -> sqlx::Result<sqlx::Pool<sqlx::Postgres>> {
//! # unimplemented!()
//! # }
//!
//! #[tokio::main]
//! async fn main() -> Result<(), Box<dyn Error>> {
//! // You'll need to provide a Postgres connection pool.
@ -160,6 +175,7 @@
//!
//! // The job runner will continue listening and running
//! // jobs until `runner` is dropped.
//! Ok(())
//! }
//! ```
//!
@ -168,12 +184,25 @@
//! The final step is to actually run a job.
//!
//! ```rust
//! # use std::error::Error;
//! # use sqlxmq::{job, CurrentJob};
//! #
//! # #[job]
//! # async fn example_job(
//! # current_job: CurrentJob,
//! # ) -> Result<(), Box<dyn Error + Send + Sync + 'static>> { Ok(()) }
//! #
//! # async fn example(
//! # pool: sqlx::Pool<sqlx::Postgres>
//! # ) -> Result<(), Box<dyn Error + Send + Sync + 'static>> {
//! example_job.new()
//! // This is where we override job configuration
//! .set_channel_name("bar")
//! .set_json("John")
//! .set_json("John")?
//! .spawn(&pool)
//! .await?;
//! # Ok(())
//! # }
//! ```
#[doc(hidden)]