aboutsummaryrefslogtreecommitdiff
path: root/src/types/value.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/types/value.rs')
-rw-r--r--src/types/value.rs30
1 files changed, 25 insertions, 5 deletions
diff --git a/src/types/value.rs b/src/types/value.rs
index 64dc203..ca3ee9f 100644
--- a/src/types/value.rs
+++ b/src/types/value.rs
@@ -3,7 +3,8 @@ use super::{Null, Type};
/// Owning [dynamic type value](http://sqlite.org/datatype3.html). Value's type is typically
/// dictated by SQLite (not by the caller).
///
-/// See [`ValueRef`](enum.ValueRef.html) for a non-owning dynamic type value.
+/// See [`ValueRef`](crate::types::ValueRef) for a non-owning dynamic type
+/// value.
#[derive(Clone, Debug, PartialEq)]
pub enum Value {
/// The value is a `NULL` value.
@@ -19,37 +20,41 @@ pub enum Value {
}
impl From<Null> for Value {
+ #[inline]
fn from(_: Null) -> Value {
Value::Null
}
}
impl From<bool> for Value {
+ #[inline]
fn from(i: bool) -> Value {
Value::Integer(i as i64)
}
}
impl From<isize> for Value {
+ #[inline]
fn from(i: isize) -> Value {
Value::Integer(i as i64)
}
}
#[cfg(feature = "i128_blob")]
+#[cfg_attr(docsrs, doc(cfg(feature = "i128_blob")))]
impl From<i128> for Value {
+ #[inline]
fn from(i: i128) -> Value {
- use byteorder::{BigEndian, ByteOrder};
- let mut buf = vec![0u8; 16];
// We store these biased (e.g. with the most significant bit flipped)
// so that comparisons with negative numbers work properly.
- BigEndian::write_i128(&mut buf, i ^ (1i128 << 127));
- Value::Blob(buf)
+ Value::Blob(i128::to_be_bytes(i ^ (1_i128 << 127)).to_vec())
}
}
#[cfg(feature = "uuid")]
+#[cfg_attr(docsrs, doc(cfg(feature = "uuid")))]
impl From<uuid::Uuid> for Value {
+ #[inline]
fn from(id: uuid::Uuid) -> Value {
Value::Blob(id.as_bytes().to_vec())
}
@@ -58,6 +63,7 @@ impl From<uuid::Uuid> for Value {
macro_rules! from_i64(
($t:ty) => (
impl From<$t> for Value {
+ #[inline]
fn from(i: $t) -> Value {
Value::Integer(i64::from(i))
}
@@ -73,24 +79,35 @@ from_i64!(u16);
from_i64!(u32);
impl From<i64> for Value {
+ #[inline]
fn from(i: i64) -> Value {
Value::Integer(i)
}
}
+impl From<f32> for Value {
+ #[inline]
+ fn from(f: f32) -> Value {
+ Value::Real(f.into())
+ }
+}
+
impl From<f64> for Value {
+ #[inline]
fn from(f: f64) -> Value {
Value::Real(f)
}
}
impl From<String> for Value {
+ #[inline]
fn from(s: String) -> Value {
Value::Text(s)
}
}
impl From<Vec<u8>> for Value {
+ #[inline]
fn from(v: Vec<u8>) -> Value {
Value::Blob(v)
}
@@ -100,6 +117,7 @@ impl<T> From<Option<T>> for Value
where
T: Into<Value>,
{
+ #[inline]
fn from(v: Option<T>) -> Value {
match v {
Some(x) => x.into(),
@@ -110,6 +128,8 @@ where
impl Value {
/// Returns SQLite fundamental datatype.
+ #[inline]
+ #[must_use]
pub fn data_type(&self) -> Type {
match *self {
Value::Null => Type::Null,