Add some From<Value> and TryFrom<Value> implementations (#1401)
This commit is contained in:
parent
e9364d2efd
commit
b92536b649
6 changed files with 124 additions and 0 deletions
|
@ -41,6 +41,10 @@ pub enum Error {
|
||||||
#[error("The key being inserted already exists")]
|
#[error("The key being inserted already exists")]
|
||||||
TxKeyAlreadyExists,
|
TxKeyAlreadyExists,
|
||||||
|
|
||||||
|
/// It's is not possible to convert between the two types
|
||||||
|
#[error("Cannot convert from '{0}' to '{1}'")]
|
||||||
|
TryFromError(String, &'static str),
|
||||||
|
|
||||||
/// No namespace has been selected
|
/// No namespace has been selected
|
||||||
#[error("Specify a namespace to use")]
|
#[error("Specify a namespace to use")]
|
||||||
NsEmpty,
|
NsEmpty,
|
||||||
|
|
|
@ -51,6 +51,12 @@ impl Deref for Datetime {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl From<Datetime> for DateTime<Utc> {
|
||||||
|
fn from(x: Datetime) -> Self {
|
||||||
|
x.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl Datetime {
|
impl Datetime {
|
||||||
/// Convert the Datetime to a raw String
|
/// Convert the Datetime to a raw String
|
||||||
pub fn to_raw(&self) -> String {
|
pub fn to_raw(&self) -> String {
|
||||||
|
|
|
@ -44,6 +44,12 @@ impl From<&str> for Duration {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl From<Duration> for time::Duration {
|
||||||
|
fn from(s: Duration) -> Self {
|
||||||
|
s.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl Deref for Duration {
|
impl Deref for Duration {
|
||||||
type Target = time::Duration;
|
type Target = time::Duration;
|
||||||
fn deref(&self) -> &Self::Target {
|
fn deref(&self) -> &Self::Target {
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
use crate::err::Error;
|
||||||
use crate::sql::ending::number as ending;
|
use crate::sql::ending::number as ending;
|
||||||
use crate::sql::error::IResult;
|
use crate::sql::error::IResult;
|
||||||
use crate::sql::serde::is_internal_serialization;
|
use crate::sql::serde::is_internal_serialization;
|
||||||
|
@ -119,6 +120,36 @@ impl From<BigDecimal> for Number {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl TryFrom<Number> for i64 {
|
||||||
|
type Error = Error;
|
||||||
|
fn try_from(value: Number) -> Result<Self, Self::Error> {
|
||||||
|
match value {
|
||||||
|
Number::Int(x) => Ok(x),
|
||||||
|
_ => Err(Error::TryFromError(value.to_string(), "i64")),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl TryFrom<Number> for f64 {
|
||||||
|
type Error = Error;
|
||||||
|
fn try_from(value: Number) -> Result<Self, Self::Error> {
|
||||||
|
match value {
|
||||||
|
Number::Float(x) => Ok(x),
|
||||||
|
_ => Err(Error::TryFromError(value.to_string(), "f64")),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl TryFrom<Number> for BigDecimal {
|
||||||
|
type Error = Error;
|
||||||
|
fn try_from(value: Number) -> Result<Self, Self::Error> {
|
||||||
|
match value {
|
||||||
|
Number::Decimal(x) => Ok(x),
|
||||||
|
_ => Err(Error::TryFromError(value.to_string(), "BigDecimal")),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl Display for Number {
|
impl Display for Number {
|
||||||
fn fmt(&self, f: &mut Formatter) -> fmt::Result {
|
fn fmt(&self, f: &mut Formatter) -> fmt::Result {
|
||||||
match self {
|
match self {
|
||||||
|
|
|
@ -43,6 +43,12 @@ impl Deref for Strand {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl From<Strand> for String {
|
||||||
|
fn from(s: Strand) -> Self {
|
||||||
|
s.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl Strand {
|
impl Strand {
|
||||||
/// Get the underlying String slice
|
/// Get the underlying String slice
|
||||||
pub fn as_str(&self) -> &str {
|
pub fn as_str(&self) -> &str {
|
||||||
|
|
|
@ -464,6 +464,77 @@ impl From<Id> for Value {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl TryFrom<Value> for i64 {
|
||||||
|
type Error = Error;
|
||||||
|
fn try_from(value: Value) -> Result<Self, Self::Error> {
|
||||||
|
match value {
|
||||||
|
Value::Number(x) => x.try_into(),
|
||||||
|
_ => Err(Error::TryFromError(value.to_string(), "i64")),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl TryFrom<Value> for f64 {
|
||||||
|
type Error = Error;
|
||||||
|
fn try_from(value: Value) -> Result<Self, Self::Error> {
|
||||||
|
match value {
|
||||||
|
Value::Number(x) => x.try_into(),
|
||||||
|
_ => Err(Error::TryFromError(value.to_string(), "f64")),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl TryFrom<Value> for BigDecimal {
|
||||||
|
type Error = Error;
|
||||||
|
fn try_from(value: Value) -> Result<Self, Self::Error> {
|
||||||
|
match value {
|
||||||
|
Value::Number(x) => x.try_into(),
|
||||||
|
_ => Err(Error::TryFromError(value.to_string(), "BigDecimal")),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl TryFrom<Value> for String {
|
||||||
|
type Error = Error;
|
||||||
|
fn try_from(value: Value) -> Result<Self, Self::Error> {
|
||||||
|
match value {
|
||||||
|
Value::Strand(x) => Ok(x.into()),
|
||||||
|
_ => Err(Error::TryFromError(value.to_string(), "String")),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl TryFrom<Value> for bool {
|
||||||
|
type Error = Error;
|
||||||
|
fn try_from(value: Value) -> Result<Self, Self::Error> {
|
||||||
|
match value {
|
||||||
|
Value::True => Ok(true),
|
||||||
|
Value::False => Ok(false),
|
||||||
|
_ => Err(Error::TryFromError(value.to_string(), "bool")),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl TryFrom<Value> for std::time::Duration {
|
||||||
|
type Error = Error;
|
||||||
|
fn try_from(value: Value) -> Result<Self, Self::Error> {
|
||||||
|
match value {
|
||||||
|
Value::Duration(x) => Ok(x.into()),
|
||||||
|
_ => Err(Error::TryFromError(value.to_string(), "time::Duration")),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl TryFrom<Value> for DateTime<Utc> {
|
||||||
|
type Error = Error;
|
||||||
|
fn try_from(value: Value) -> Result<Self, Self::Error> {
|
||||||
|
match value {
|
||||||
|
Value::Datetime(x) => Ok(x.into()),
|
||||||
|
_ => Err(Error::TryFromError(value.to_string(), "chrono::DateTime<Utc>")),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl Value {
|
impl Value {
|
||||||
// -----------------------------------
|
// -----------------------------------
|
||||||
// Initial record value
|
// Initial record value
|
||||||
|
|
Loading…
Reference in a new issue