1pub mod adapter;
2pub mod connection;
3pub mod transaction;
4pub mod codec;
5pub mod message;
6pub mod protocol;
7
8pub use adapter::PostgresAdapter;
9pub use connection::PostgresConnection;
10pub use transaction::PostgresTransaction;
11pub use codec::{BackendMessage, PgCodec, PgServerCodec};
12pub use message::Message;
13
14use futures::{StreamExt, SinkExt};
15use tokio::net::TcpStream;
16use tokio_util::codec::Framed;
17use tracing::{error, info};
18use yykv_types::DsError;
19
20pub type Result<T> = std::result::Result<T, DsError>;
21
22pub async fn handle_connection(stream: TcpStream) -> Result<()> {
24 let mut framed = Framed::new(stream, PgServerCodec::new());
25 info!("New Postgres connection established");
26
27 while let Some(result) = framed.next().await {
28 match result {
29 Ok(msg) => {
30 info!("Received Postgres message: {:?}", msg);
31 }
33 Err(e) => {
34 error!("Postgres protocol error: {}", e);
35 break;
36 }
37 }
38 }
39
40 Ok(())
41}