@@ -2,20 +2,33 @@ use crate::{Backend, Error, Result};
22use bb8:: Pool ;
33use bb8_postgres:: PostgresConnectionManager ;
44use pgstac:: Client ;
5+ use pgstac:: MakeRustlsConnect ;
56use serde_json:: Map ;
67use stac:: { Collection , Item } ;
78use stac_api:: { ItemCollection , Items , Search } ;
8- use tokio_postgres:: tls:: NoTls ;
9+ use tokio_postgres:: {
10+ tls:: { MakeTlsConnect , TlsConnect } ,
11+ Socket ,
12+ } ;
913
1014/// A backend for a [pgstac](https://github.com/stac-utils/pgstac) database.
1115#[ derive( Clone , Debug ) ]
12- pub struct PgstacBackend {
13- pool : Pool < PostgresConnectionManager < NoTls > > ,
16+ pub struct PgstacBackend < Tls >
17+ where
18+ Tls : MakeTlsConnect < Socket > + Clone + Send + Sync + ' static ,
19+ <Tls as MakeTlsConnect < Socket > >:: Stream : Send + Sync ,
20+ <Tls as MakeTlsConnect < Socket > >:: TlsConnect : Send ,
21+ <<Tls as MakeTlsConnect < Socket > >:: TlsConnect as TlsConnect < Socket > >:: Future : Send ,
22+ {
23+ pool : Pool < PostgresConnectionManager < Tls > > ,
1424}
1525
16- impl PgstacBackend {
26+ impl PgstacBackend < MakeRustlsConnect > {
1727 /// Creates a new PgstacBackend from a string-like configuration.
1828 ///
29+ /// This will use an unverified tls. To provide your own tls, use
30+ /// [PgstacBackend::new_from_stringlike_and_tls].
31+ ///
1932 /// # Examples
2033 ///
2134 /// ```no_run
@@ -24,18 +37,53 @@ impl PgstacBackend {
2437 /// let backend = PgstacBackend::new_from_stringlike("postgresql://username:password@localhost:5432/postgis").await.unwrap();
2538 /// # })
2639 /// ```
27- pub async fn new_from_stringlike ( params : impl ToString ) -> Result < PgstacBackend > {
28- let connection_manager = PostgresConnectionManager :: new_from_stringlike ( params, NoTls ) ?;
29- let pool = Pool :: builder ( ) . build ( connection_manager) . await ?;
30- Ok ( PgstacBackend :: new ( pool) )
40+ pub async fn new_from_stringlike (
41+ params : impl ToString ,
42+ ) -> Result < PgstacBackend < MakeRustlsConnect > > {
43+ let tls = pgstac:: make_unverified_tls ( ) ;
44+ PgstacBackend :: new_from_stringlike_and_tls ( params, tls) . await
3145 }
46+ }
3247
33- fn new ( pool : Pool < PostgresConnectionManager < NoTls > > ) -> PgstacBackend {
34- PgstacBackend { pool }
48+ impl < Tls > PgstacBackend < Tls >
49+ where
50+ Tls : MakeTlsConnect < Socket > + Clone + Send + Sync + ' static ,
51+ <Tls as MakeTlsConnect < Socket > >:: Stream : Send + Sync ,
52+ <Tls as MakeTlsConnect < Socket > >:: TlsConnect : Send ,
53+ <<Tls as MakeTlsConnect < Socket > >:: TlsConnect as TlsConnect < Socket > >:: Future : Send ,
54+ {
55+ /// Creates a new PgstacBackend from a string-like configuration and a tls.
56+ ///
57+ /// # Examples
58+ ///
59+ /// ```no_run
60+ /// use stac_server::PgstacBackend;
61+ ///
62+ /// let tls = pgstac::make_unverified_tls();
63+ /// # tokio_test::block_on(async {
64+ /// let backend = PgstacBackend::new_from_stringlike_and_tls(
65+ /// "postgresql://username:password@localhost:5432/postgis",
66+ /// tls
67+ /// ).await.unwrap();
68+ /// # })
69+ /// ```
70+ pub async fn new_from_stringlike_and_tls (
71+ params : impl ToString ,
72+ tls : Tls ,
73+ ) -> Result < PgstacBackend < Tls > > {
74+ let connection_manager = PostgresConnectionManager :: new_from_stringlike ( params, tls) ?;
75+ let pool = Pool :: builder ( ) . build ( connection_manager) . await ?;
76+ Ok ( PgstacBackend { pool } )
3577 }
3678}
3779
38- impl Backend for PgstacBackend {
80+ impl < Tls > Backend for PgstacBackend < Tls >
81+ where
82+ Tls : MakeTlsConnect < Socket > + Clone + Send + Sync + ' static ,
83+ <Tls as MakeTlsConnect < Socket > >:: Stream : Send + Sync ,
84+ <Tls as MakeTlsConnect < Socket > >:: TlsConnect : Send ,
85+ <<Tls as MakeTlsConnect < Socket > >:: TlsConnect as TlsConnect < Socket > >:: Future : Send ,
86+ {
3987 fn has_item_search ( & self ) -> bool {
4088 true
4189 }
0 commit comments