From 9254c2662cb16ed4e4f3149822cf532bb3849a79 Mon Sep 17 00:00:00 2001 From: Jonas Platte Date: Fri, 16 Feb 2024 11:13:26 +0100 Subject: [PATCH] Check that examples in crate-level docs compile --- omniqueue/Cargo.toml | 1 + omniqueue/src/lib.rs | 93 +++++++++++++++++++++++++++++--------------- 2 files changed, 63 insertions(+), 31 deletions(-) diff --git a/omniqueue/Cargo.toml b/omniqueue/Cargo.toml index 387f6ea..3400b05 100644 --- a/omniqueue/Cargo.toml +++ b/omniqueue/Cargo.toml @@ -29,6 +29,7 @@ tokio-util = { version = "0.7", optional = true } tracing = "0.1" [dev-dependencies] +anyhow = "1.0.79" fastrand = "1.9" tokio-executor-trait = "2.1" tokio-reactor-trait = "1.1" diff --git a/omniqueue/src/lib.rs b/omniqueue/src/lib.rs index ba88db5..113bf6c 100644 --- a/omniqueue/src/lib.rs +++ b/omniqueue/src/lib.rs @@ -25,36 +25,53 @@ //! //! ## How to Use Omniqueue //! -//! Each queue backend has a unique configuration type. One of these configurations is taken -//! when constructing the [`queue::QueueBuilder`]. -//! -//! To create a simple producer and/or consumer: -//! -//! ```compile_fail -//! let cfg = SqsConfig { -//! queue_dsn: "http://localhost:9234/queue/queue_name".to_owned(), -//! override_endpoint: true, -//! }; -//! -//! // Either both producer and consumer -//! let (p, mut c) = SqsQueueBackend::builder(cfg.clone()).build_pair().await?; -//! -//! // Or one half -//! let p = SqsQueueBackend::builder(cfg.clone()).build_producer().await?; -//! let mut c = SqsQueueBackend::builder(cfg).build_consumer().await?; -//! -//! (p, c) -//! ``` -//! -//! Sending and receiving information from this queue is simple: -//! -//! ```compile_fail -//! p.send_serde_json(&ExampleType::default()).await?; +//! Each queue backend has a unique configuration type. One of these configurations is taken +//! when constructing the [`queue::QueueBuilder`]. +//! +//! To create a simple producer and/or consumer: +//! +//! ```no_run +//! # async { +//! use omniqueue::{ +//! backends::sqs::{SqsConfig, SqsQueueBackend}, +//! queue::QueueBackend, +//! }; +//! +//! let cfg = SqsConfig { +//! queue_dsn: "http://localhost:9234/queue/queue_name".to_owned(), +//! override_endpoint: true, +//! }; +//! +//! // Either both producer and consumer +//! let (p, mut c) = SqsQueueBackend::builder(cfg.clone()).build_pair().await?; +//! +//! // Or one half +//! let p = SqsQueueBackend::builder(cfg.clone()).build_producer().await?; +//! let mut c = SqsQueueBackend::builder(cfg).build_consumer().await?; +//! # anyhow::Ok(()) +//! # }; +//! ``` //! -//! let delivery = c.receive().await?; -//! let payload = delivery.payload_serde_json::().await?; -//! delivery.ack().await?; -//! ``` +//! Sending and receiving information from this queue is simple: +//! +//! ```no_run +//! # use omniqueue::{ +//! # backends::sqs::SqsQueueBackend, +//! # queue::{consumer::QueueConsumer, producer::QueueProducer, QueueBackend}, +//! # }; +//! # async { +//! # #[derive(Default, serde::Deserialize, serde::Serialize)] +//! # struct ExampleType; +//! # +//! # let (p, mut c) = SqsQueueBackend::builder(todo!()).build_pair().await?; +//! p.send_serde_json(&ExampleType::default()).await?; +//! +//! let delivery = c.receive().await?; +//! let payload = delivery.payload_serde_json::()?; +//! delivery.ack().await.map_err(|(e, _)| e)?; +//! # anyhow::Ok(()) +//! # }; +//! ``` //! //! ## `DynProducer`s and `DynConsumer`s //! @@ -63,11 +80,17 @@ //! //! Making a `DynProducer` or `DynConsumer` is as simple as adding one line to the builder: //! -//! ```compile_fail +//! ```no_run +//! # async { +//! # let cfg = todo!(); +//! use omniqueue::{backends::rabbitmq::RabbitMqBackend, queue::QueueBackend}; +//! //! let (p, mut c) = RabbitMqBackend::builder(cfg) //! .make_dynamic() //! .build_pair() //! .await?; +//! # anyhow::Ok(()) +//! # }; //! ``` //! //! ## Encoders/Decoders @@ -81,7 +104,11 @@ //! //! Any function or closure with the right signature may be used as an encoder or decoder. //! -//! ```compile_fail +//! ```no_run +//! # async { +//! # let cfg = todo!(); +//! use omniqueue::{backends::rabbitmq::RabbitMqBackend, queue::QueueBackend, QueueError}; +//! //! #[derive(Debug, PartialEq)] //! struct ExampleType { //! field: u8, @@ -96,6 +123,10 @@ //! field: *v.first().unwrap_or(&0), //! }) //! }) +//! .build_pair() +//! .await?; +//! # anyhow::Ok(()) +//! # }; //! ``` use std::fmt::Debug;