diff --git a/types/range.rs b/types/range.rs index 733f0444..7581bfd6 100644 --- a/types/range.rs +++ b/types/range.rs @@ -1,4 +1,45 @@ //! Types dealing with ranges of values +//! +//! # Macros +//! +//! The `quote!` macro can make it easier to create ranges. It roughly mirrors +//! traditional mathematic range syntax. +//! +//! # Note +//! +//! The `Range`, `RangeBound`, `Inclusive`, and `Exclusive` types must be +//! directly usable at the location the macro is used. +//! +//! ```rust +//! #[feature(phase)]; +//! +//! #[phase(syntax, link)] +//! extern mod postgres; +//! +//! use postgres::types::range::{Range, RangeBound, Inclusive, Exclusive}; +//! +//! fn main() { +//! # let mut r: Range; +//! // a closed interval +//! r = range!('[' 5i32, 10i32 ']'); +//! // an open interval +//! r = range!('(' 5i32, 10i32 ')'); +//! // half-open intervals +//! r = range!('(' 5i32, 10i32 ']'); +//! r = range!('[' 5i32, 10i32 ')'); +//! // a closed lower-bounded interval +//! r = range!('[' 5i32, ')'); +//! // an open lower-bounded interval +//! r = range!('(' 5i32, ')'); +//! // a closed upper-bounded interval +//! r = range!('(', 10i32 ']'); +//! // an open upper-bounded interval +//! r = range!('(', 10i32 ')'); +//! // an unbounded interval +//! r = range!('(', ')'); +//! // an empty interval +//! r = range!(empty); +//! } #[macro_escape]; extern mod extra; @@ -8,6 +49,7 @@ use std::i32; use std::i64; use extra::time::Timespec; +#[macro_export] macro_rules! range( (empty) => (Range::empty()); ('(', ')') => (Range::new(None, None));