@@ -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 ) ]
230252pub 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