Skip to content
This repository was archived by the owner on Aug 18, 2025. It is now read-only.

Commit e1afc3a

Browse files
committed
Extend Display implementations
1 parent 153f443 commit e1afc3a

File tree

2 files changed

+55
-15
lines changed

2 files changed

+55
-15
lines changed

src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ impl fmt::Display for Schema {
3737
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
3838
for table in &self.tables {
3939
f.write_fmt(format_args!("{table}"))?;
40+
f.write_str("\n")?;
4041
}
4142

4243
Ok(())

src/types.rs

Lines changed: 54 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ pub enum Type {
1111
Array(Box<Type>),
1212
Builtin(PgType),
1313
Composite(CompositeRef),
14-
Enum(PgEnum),
14+
Enum(EnumRef),
1515
Vector,
1616
}
1717

@@ -64,7 +64,9 @@ impl Type {
6464
}))
6565
}
6666
// enum: 'e' is 101 in ASCII
67-
101 => Self::Enum(PgEnum::from_postgres(row.get(0), row.get(1), client).await?),
67+
101 => Self::Enum(EnumRef {
68+
name: row.get::<_, &str>(1).to_owned(),
69+
}),
6870
ty => todo!(
6971
"unknown Postgres type {ty:?} (from name {:?})",
7072
row.get::<_, &str>(1)
@@ -77,10 +79,15 @@ impl Type {
7779
match self {
7880
Builtin(
7981
PgType::BOOL
82+
| PgType::FLOAT4
83+
| PgType::FLOAT8
8084
| PgType::TIMESTAMP
8185
| PgType::TIMESTAMPTZ
8286
| PgType::INT8
83-
| PgType::INT4,
87+
| PgType::INT4
88+
| PgType::INT2
89+
| PgType::INET
90+
| PgType::INTERVAL,
8491
) => true,
8592
Builtin(PgType::TEXT | PgType::TEXT_ARRAY | PgType::BYTEA | PgType::BYTEA_ARRAY) => {
8693
false
@@ -124,17 +131,27 @@ impl fmt::Display for Type {
124131
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
125132
use Type::*;
126133
match self {
134+
Array(inner) => fmt.write_fmt(format_args!("Vec<{inner}>")),
127135
Builtin(PgType::BOOL) => write!(fmt, "bool"),
128136
Builtin(PgType::BYTEA) => write!(fmt, "Vec<u8>"),
129137
Builtin(PgType::BYTEA_ARRAY) => write!(fmt, "Vec<Vec<u8>>"),
138+
Builtin(PgType::FLOAT4) => write!(fmt, "f32"),
139+
Builtin(PgType::FLOAT8) => write!(fmt, "f64"),
140+
Builtin(PgType::INET) => write!(fmt, "std::net::IpAddr"),
141+
Builtin(PgType::INT2) => write!(fmt, "i16"),
130142
Builtin(PgType::INT4) => write!(fmt, "i32"),
131143
Builtin(PgType::INT8) => write!(fmt, "i64"),
144+
Builtin(PgType::INTERVAL) => write!(fmt, "PgInterval"),
145+
Builtin(PgType::JSONB) => write!(fmt, "JsonB"),
132146
Builtin(PgType::TEXT) => write!(fmt, "String"),
133147
Builtin(PgType::TEXT_ARRAY) => write!(fmt, "Vec<String>"),
134148
Builtin(PgType::TIMESTAMP) => write!(fmt, "chrono::naive::NaiveDateTime"),
135149
Builtin(PgType::TIMESTAMPTZ) => write!(fmt, "chrono::DateTime<chrono::Utc>"),
150+
Builtin(PgType::UUID) => write!(fmt, "uuid::Uuid"),
151+
Builtin(inner) => todo!("fmt::Display for {inner:?}"),
136152
Composite(inner) => write!(fmt, "{}", AsUpperCamelCase(&inner.name)),
137-
ty => todo!("fmt::Display for {ty:?}"),
153+
Enum(inner) => write!(fmt, "{inner}"),
154+
Vector => write!(fmt, "pgvector::Vector"),
138155
}
139156
}
140157
}
@@ -197,21 +214,26 @@ impl fmt::Display for TypeAsRef<'_> {
197214

198215
use Type::*;
199216
match val {
200-
Array(inner) => fmt.write_fmt(format_args!("Vec<{inner}>")),
201-
Builtin(PgType::INT8) => write!(fmt, "i64"),
202-
Builtin(PgType::INT4) => write!(fmt, "i32"),
217+
Array(inner) => fmt.write_fmt(format_args!(
218+
"&{}{}{}[{}]",
219+
lt_prefix,
220+
lt_name,
221+
lt_suffix,
222+
TypeAsRef {
223+
lifetime: *lifetime,
224+
val: inner
225+
}
226+
)),
203227
Builtin(PgType::TEXT) => write!(fmt, "&{}{}{}str", lt_prefix, lt_name, lt_suffix),
204228
Builtin(PgType::TEXT_ARRAY) => {
205-
write!(fmt, "Vec<&{}{}{}str>", lt_prefix, lt_name, lt_suffix)
229+
write!(fmt, "[&{}{}{}str]", lt_prefix, lt_name, lt_suffix)
206230
}
207-
Builtin(PgType::BYTEA) => write!(fmt, "Vec<u8>"),
231+
Builtin(PgType::BYTEA) => write!(fmt, "&[u8]"),
208232
Builtin(PgType::BYTEA_ARRAY) => {
209-
write!(fmt, "Vec<&{}{}{}[u8]>", lt_prefix, lt_name, lt_suffix)
233+
write!(fmt, "&{}{}{}[u8]>", lt_prefix, lt_name, lt_suffix)
210234
}
211-
Builtin(PgType::BOOL) => write!(fmt, "bool"),
212-
Builtin(PgType::TIMESTAMP) => write!(fmt, "chrono::naive::NaiveDateTime",),
213-
Builtin(PgType::TIMESTAMPTZ) => write!(fmt, "chrono::DateTime<chrono::Utc>",),
214-
Builtin(inner) => todo!("no Display for {inner:?}"),
235+
Builtin(PgType::JSONB) => write!(fmt, "&impl Serialize"),
236+
Builtin(_) => write!(fmt, "{val}"),
215237
Composite(inner) => write!(
216238
fmt,
217239
"&{}{}{}{}",
@@ -228,5 +250,22 @@ impl fmt::Display for TypeAsRef<'_> {
228250

229251
#[derive(Debug, PartialEq)]
230252
pub struct CompositeRef {
231-
name: String,
253+
pub(crate) name: String,
254+
}
255+
256+
impl fmt::Display for CompositeRef {
257+
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
258+
f.write_fmt(format_args!("{}", &AsUpperCamelCase(&self.name)))
259+
}
260+
}
261+
262+
#[derive(Debug, PartialEq)]
263+
pub struct EnumRef {
264+
pub(crate) name: String,
265+
}
266+
267+
impl fmt::Display for EnumRef {
268+
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
269+
f.write_fmt(format_args!("{}", &AsUpperCamelCase(&self.name)))
270+
}
232271
}

0 commit comments

Comments
 (0)