Skip to content

Commit cee8e00

Browse files
committed
More macro cleanup
1 parent 29372eb commit cee8e00

1 file changed

Lines changed: 95 additions & 111 deletions

File tree

types/mod.rs

Lines changed: 95 additions & 111 deletions
Original file line numberDiff line numberDiff line change
@@ -64,120 +64,104 @@ static RANGE_UPPER_INCLUSIVE: i8 = 0b0000_0100;
6464
static RANGE_LOWER_INCLUSIVE: i8 = 0b0000_0010;
6565
static RANGE_EMPTY: i8 = 0b0000_0001;
6666

67-
/// A Postgres type
68-
#[deriving(Eq)]
69-
pub enum PostgresType {
70-
/// BOOL
71-
PgBool,
72-
/// BYTEA
73-
PgByteA,
74-
/// "char"
75-
PgChar,
76-
/// INT8/BIGINT
77-
PgInt8,
78-
/// INT2/SMALLINT
79-
PgInt2,
80-
/// INT4/INT
81-
PgInt4,
82-
/// TEXT
83-
PgText,
84-
/// JSON
85-
PgJson,
86-
/// FLOAT4/REAL
87-
PgFloat4,
88-
/// FLOAT8/DOUBLE PRECISION
89-
PgFloat8,
90-
/// BOOL[]
91-
PgBoolArray,
92-
/// BYTEA[]
93-
PgByteAArray,
94-
/// "char"[]
95-
PgCharArray,
96-
/// INT2[]
97-
PgInt2Array,
98-
/// INT4[]
99-
PgInt4Array,
100-
/// TEXT[]
101-
PgTextArray,
102-
/// INT8[]
103-
PgInt8Array,
104-
/// FLOAT4[]
105-
PgFloat4Array,
106-
/// FLOAT8[]
107-
PgFloat8Array,
108-
/// TIMESTAMP
109-
PgTimestamp,
110-
/// TIMESTAMP WITH TIME ZONE
111-
PgTimestampZ,
112-
/// CHAR(n)/CHARACTER(n)
113-
PgCharN,
114-
/// VARCHAR/CHARACTER VARYING
115-
PgVarchar,
116-
/// UUID
117-
PgUuid,
118-
/// INT4RANGE
119-
PgInt4Range,
120-
/// INT8RANGE
121-
PgInt8Range,
122-
/// TSRANGE
123-
PgTsRange,
124-
/// TSTZRANGE
125-
PgTstzRange,
126-
/// An unknown type
127-
PgUnknownType {
128-
/// The name of the type
129-
name: ~str,
130-
/// The OID of the type
131-
oid: Oid
132-
}
133-
}
134-
135-
impl PostgresType {
136-
#[doc(hidden)]
137-
pub fn from_oid(oid: Oid) -> PostgresType {
138-
match oid {
139-
BOOLOID => PgBool,
140-
BYTEAOID => PgByteA,
141-
CHAROID => PgChar,
142-
INT8OID => PgInt8,
143-
INT2OID => PgInt2,
144-
INT4OID => PgInt4,
145-
TEXTOID => PgText,
146-
JSONOID => PgJson,
147-
FLOAT4OID => PgFloat4,
148-
FLOAT8OID => PgFloat8,
149-
BOOLARRAYOID => PgBoolArray,
150-
BYTEAARRAYOID => PgByteAArray,
151-
CHARARRAYOID => PgCharArray,
152-
INT2ARRAYOID => PgInt2Array,
153-
INT4ARRAYOID => PgInt4Array,
154-
TEXTARRAYOID => PgTextArray,
155-
INT8ARRAYOID => PgInt8Array,
156-
FLOAT4ARRAYOID => PgFloat4Array,
157-
FLAOT8ARRAYOID => PgFloat8Array,
158-
TIMESTAMPOID => PgTimestamp,
159-
TIMESTAMPZOID => PgTimestampZ,
160-
BPCHAROID => PgCharN,
161-
VARCHAROID => PgVarchar,
162-
UUIDOID => PgUuid,
163-
INT4RANGEOID => PgInt4Range,
164-
INT8RANGEOID => PgInt8Range,
165-
TSRANGEOID => PgTsRange,
166-
TSTZRANGEOID => PgTstzRange,
167-
// We have to load an empty string now, it'll get filled in later
168-
oid => PgUnknownType { name: ~"", oid: oid }
67+
macro_rules! make_postgres_type(
68+
($($doc:attr $variant:ident => $oid:ident),+) => (
69+
/// A Postgres type
70+
#[deriving(Eq)]
71+
pub enum PostgresType {
72+
$(
73+
$doc
74+
$variant,
75+
)+
76+
/// An unknown type
77+
PgUnknownType {
78+
/// The name of the type
79+
name: ~str,
80+
/// The OID of the type
81+
oid: Oid
82+
}
16983
}
170-
}
17184

172-
/// Returns the wire format needed for the value of `self`.
173-
pub fn result_format(&self) -> Format {
174-
match *self {
175-
PgUnknownType { name: ~"hstore", .. } => Binary,
176-
PgUnknownType { .. } => Text,
177-
_ => Binary
85+
impl PostgresType {
86+
#[doc(hidden)]
87+
pub fn from_oid(oid: Oid) -> PostgresType {
88+
match oid {
89+
$($oid => $variant,)+
90+
// We have to load an empty string now, it'll get filled in later
91+
oid => PgUnknownType { name: ~"", oid: oid }
92+
}
93+
}
94+
95+
/// Returns the wire format needed for the value of `self`.
96+
pub fn result_format(&self) -> Format {
97+
match *self {
98+
PgUnknownType { name: ~"hstore", .. } => Binary,
99+
PgUnknownType { .. } => Text,
100+
_ => Binary
101+
}
102+
}
178103
}
179-
}
180-
}
104+
)
105+
)
106+
107+
make_postgres_type!(
108+
#[doc="BOOL"]
109+
PgBool => BOOLOID,
110+
#[doc="BYTEA"]
111+
PgByteA => BYTEAOID,
112+
#[doc="\"char\""]
113+
PgChar => CHAROID,
114+
#[doc="INT8/BIGINT"]
115+
PgInt8 => INT8OID,
116+
#[doc="INT2/SMALLINT"]
117+
PgInt2 => INT2OID,
118+
#[doc="INT4/INT"]
119+
PgInt4 => INT4OID,
120+
#[doc="TEXT"]
121+
PgText => TEXTOID,
122+
#[doc="JSON"]
123+
PgJson => JSONOID,
124+
#[doc="FLOAT4/REAL"]
125+
PgFloat4 => FLOAT4OID,
126+
#[doc="FLOAT8/DOUBLE PRECISION"]
127+
PgFloat8 => FLOAT8OID,
128+
#[doc="BOOL[]"]
129+
PgBoolArray => BOOLARRAYOID,
130+
#[doc="BYTEA[]"]
131+
PgByteAArray => BYTEAARRAYOID,
132+
#[doc="\"char\"[]"]
133+
PgCharArray => CHARARRAYOID,
134+
#[doc="INT2[]"]
135+
PgInt2Array => INT2ARRAYOID,
136+
#[doc="INT4[]"]
137+
PgInt4Array => INT4ARRAYOID,
138+
#[doc="TEXT[]"]
139+
PgTextArray => TEXTARRAYOID,
140+
#[doc="INT8[]"]
141+
PgInt8Array => INT8ARRAYOID,
142+
#[doc="FLOAT4[]"]
143+
PgFloat4Array => FLOAT4ARRAYOID,
144+
#[doc="FLOAT8[]"]
145+
PgFloat8Array => FLAOT8ARRAYOID,
146+
#[doc="TIMESTAMP"]
147+
PgTimestamp => TIMESTAMPOID,
148+
#[doc="TIMESTAMP WITH TIME ZONE"]
149+
PgTimestampZ => TIMESTAMPZOID,
150+
#[doc="CHAR(n)/CHARACTER(n)"]
151+
PgCharN => BPCHAROID,
152+
#[doc="VARCHAR/CHARACTER VARYING"]
153+
PgVarchar => VARCHAROID,
154+
#[doc="UUID"]
155+
PgUuid => UUIDOID,
156+
#[doc="INT4RANGE"]
157+
PgInt4Range => INT4RANGEOID,
158+
#[doc="INT8RANGE"]
159+
PgInt8Range => INT8RANGEOID,
160+
#[doc="TSRANGE"]
161+
PgTsRange => TSRANGEOID,
162+
#[doc="TSTZRANGE"]
163+
PgTstzRange => TSTZRANGEOID
164+
)
181165

182166
/// The wire format of a Postgres value
183167
pub enum Format {

0 commit comments

Comments
 (0)