Skip to content

Commit ea8a019

Browse files
committed
Add trait implementations for SqlxProto wrapper
Implement Clone, PartialEq, Eq, Hash, Default, Deref, DerefMut, AsRef, AsMut, and into_inner method to improve ergonomics of the SqlxProto wrapper type.
1 parent a6e5897 commit ea8a019

1 file changed

Lines changed: 56 additions & 1 deletion

File tree

src/lib.rs

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,41 @@
22
#![warn(missing_docs)]
33
#![doc = include_str!("../README.md")]
44

5+
use core::ops::{Deref, DerefMut};
6+
57
use prost::Message;
68
use sqlx::decode::Decode;
79
use sqlx::encode::{Encode, IsNull};
810
use sqlx::error::BoxDynError;
911
use sqlx::{Database, Type};
1012

1113
/// Wrapper for Protobuf messages to be used with sqlx.
12-
#[derive(Debug)]
14+
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
1315
pub struct SqlxProto<T>(pub T)
1416
where
1517
T: Message;
1618

19+
impl<T> Default for SqlxProto<T>
20+
where
21+
T: Message + Default,
22+
{
23+
#[inline]
24+
fn default() -> Self {
25+
Self(T::default())
26+
}
27+
}
28+
29+
impl<T> SqlxProto<T>
30+
where
31+
T: Message,
32+
{
33+
/// Get inner value
34+
#[inline]
35+
pub fn into_inner(self) -> T {
36+
self.0
37+
}
38+
}
39+
1740
impl<T> From<T> for SqlxProto<T>
1841
where
1942
T: Message,
@@ -34,6 +57,38 @@ where
3457
}
3558
}
3659

60+
impl<T> AsMut<T> for SqlxProto<T>
61+
where
62+
T: Message,
63+
{
64+
#[inline]
65+
fn as_mut(&mut self) -> &mut T {
66+
&mut self.0
67+
}
68+
}
69+
70+
impl<T> Deref for SqlxProto<T>
71+
where
72+
T: Message,
73+
{
74+
type Target = T;
75+
76+
#[inline]
77+
fn deref(&self) -> &Self::Target {
78+
&self.0
79+
}
80+
}
81+
82+
impl<T> DerefMut for SqlxProto<T>
83+
where
84+
T: Message,
85+
{
86+
#[inline]
87+
fn deref_mut(&mut self) -> &mut Self::Target {
88+
&mut self.0
89+
}
90+
}
91+
3792
impl<T, DB> Type<DB> for SqlxProto<T>
3893
where
3994
T: Message,

0 commit comments

Comments
 (0)