2 releases
0.0.2 | Jun 6, 2024 |
---|---|
0.0.1 | Jun 3, 2024 |
#979 in Procedural macros
286 downloads per month
Used in mysql-connector
28KB
664 lines
mysql-connector
Simple MySQL connector for Rust that allows exchanging the underlying connection.
Features
tcpstream
(enabled by default): implements theStream
trait for tokio'stokio::net::TcpStream
.time
(enabled by default): usestokio::time::sleep
for network timeout.serde
: implementsserde::Serialize
andserde::Deserialize
for some types.
Example
use std::sync::Arc;
use mysql_connector::{
macros::*, model::*, types::AuthPlugin, Connection, ConnectionOptions, TcpStream,
};
#[derive(Debug, ModelData, FromQueryResult, ActiveModel, IntoQuery, Model)]
#[mysql_connector(table = "user", primary = "id", auto_increment = "true")]
pub struct User {
id: u32,
name: String,
email: Option<String>,
}
#[tokio::main]
async fn main() {
dotenv::dotenv().unwrap();
let mut conn = <Connection<TcpStream>>::connect(Arc::new(ConnectionOptions {
user: "user".into(),
password: std::env::var("PASSWORD").unwrap(),
db_name: Some("db".into()),
host: Some("localhost".into()),
secure_auth: false,
auth_plugin: Some(AuthPlugin::Native),
..Default::default()
}))
.await
.unwrap();
conn.execute_query(
"CREATE TABLE `user` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
`name` VARCHAR(255) NOT NULL,
`email` VARCHAR(255)
)",
)
.await
.unwrap();
User {
id: 0,
name: String::from("foo"),
email: Some(String::from("foo@example.com")),
}
.into_active_model()
.insert(&mut conn)
.await
.unwrap();
User {
id: 0,
name: String::from("bar"),
email: None,
}
.into_active_model()
.insert(&mut conn)
.await
.unwrap();
let users: Vec<User> = conn
.query(&User::build_query())
.await
.unwrap()
.collect()
.await
.unwrap();
println!("{users:?}");
conn.disconnect().await.unwrap();
}
Dependencies
~290–740KB
~18K SLoC