gremlin-client 0.8.10

A Rust client for Apache TinkerPop™
Documentation
macro_rules! g_serializer {
    ($name:ident, { $($key:expr => $value:ident),*}) => {
        pub fn $name(val: &Value) -> GremlinResult<GValue> {
            if let Value::String(ref s) = val {
                Ok(s.clone().into())
            } else if let Value::Bool(b) = val {
                Ok((*b).into())
            } else {
                let _type = &val["@type"];
                let _type = get_value!(_type,serde_json::Value::String)?.as_str();
                let _value = &val["@value"];

                match _type {
                    $($key => {
                        $value(&$name,_value)
                    })*
                    _ => Err($crate::GremlinError::Json(format!("Type {} not supported",_type)))
                }
            }
        }
    };
}

macro_rules! g_serializer_2 {
    ($name:ident, { $($key:expr => $value:ident),*}) => {
        pub fn $name(val: &Value) -> GremlinResult<GValue> {
            if let Value::String(ref s) = val {
                return Ok(s.clone().into())
            }
            if let Value::Array(_) = val {
                let _type = "g:List";
                let _value = &val;

                return match _type {
                    $($key => {
                        $value(&$name,_value)
                    })*
                    _ => Err($crate::GremlinError::Json(format!("Type {} not supported",_type)))
                }
            }
            if let Value::Object(ref o) = val {
                if o.contains_key("@type") {
                    let _type = o.get("@type").ok_or_else(|| $crate::GremlinError::Generic("Type missing".to_string()))?.as_str().ok_or_else(|| $crate::GremlinError::Generic("Type should be a string".to_string()))?;
                    let _value = &o.get("@value").ok_or_else(|| $crate::GremlinError::Generic("Value missing".to_string()))?;

                    return match _type {
                        $($key => {
                            $value(&$name,_value)
                        })*
                        _ => Err($crate::GremlinError::Json(format!("Type {} not supported",_type)))
                    }
                }
            }

            let _type = "g:Map";
            let _value = &val;

            match _type {
                $($key => {
                    $value(&$name,_value)
                })*
                _ => Err($crate::GremlinError::Json(format!("Type {} not supported",_type)))
            }
        }
    };
}

macro_rules! get_value {
    ($value:expr,$v:path) => {
        match $value {
            $v(e) => Ok(e),
            _ => Err($crate::GremlinError::Json(String::from(stringify!($v)))),
        }
    };
}

macro_rules! expect_i32 {
    ($value:expr) => {
        match $value.as_i64() {
            Some(v) => Ok(v),
            None => Err($crate::GremlinError::Json(String::from("Expected i32"))),
        }? as i32
    };
}

macro_rules! expect_i64 {
    ($value:expr) => {
        match $value.as_i64() {
            Some(v) => Ok(v),
            None => Err($crate::GremlinError::Json(String::from("Expected i64"))),
        }?
    };
}
macro_rules! expect_float {
    ($value:expr) => {
        match $value.as_f64() {
            Some(v) => Ok(v),
            None => Err($crate::GremlinError::Json(String::from("Expected float"))),
        }? as f32
    };
}
macro_rules! expect_double {
    ($value:expr) => {
        match $value.as_f64() {
            Some(v) => Ok(v),
            None => Err($crate::GremlinError::Json(String::from("Expected double"))),
        }?
    };
}