surreal_devl 2.2.4

Contains core logic of surreal derive
Documentation
use surrealdb::sql::{Data, Thing};

use crate::proxy::default::SurrealSerializer;
use crate::surreal_edge::Edge;
use crate::surreal_id::SurrealId;

pub fn record<T>(target: &T) -> String
where
    T: SurrealSerializer + SurrealId + Clone,
{
    let id = target.id();
    format!(
        "{} {}",
        id.to_string(),
        Data::ContentExpression(target.clone().serialize()).to_string()
    )
}

pub fn id<T>(target: &T) -> String
where
    T: SurrealId,
{
    target.id().to_string()
}

pub fn content<T>(target: &T) -> String
where
    T: SurrealSerializer + Clone,
{
    Data::ContentExpression(target.clone().serialize()).to_string()
}

pub fn array<T>(target: &[T]) -> String
where
    T: SurrealSerializer + Clone,
{
    let array_value: Vec<surrealdb::sql::Value> =
        target.into_iter().map(|v| v.clone().serialize()).collect();

    surrealdb::sql::Array::from(array_value).to_string()
}

pub fn val<T>(target: &T) -> String
where
    T: SurrealSerializer,
    T: Clone,
{
    target.clone().serialize().to_string()
}

pub fn relate<I, R, O>(target: &Edge<I, R, O>) -> String
where
    R: SurrealSerializer + SurrealId + Clone,
    I: SurrealId,
    O: SurrealId,
{
    let record_id: Thing = target.data.id();
    let in_id: Thing = target
        .r#in
        .as_ref()
        .expect("In direction cannot be null when serialize")
        .id();
    let out_id: Thing = target
        .out
        .as_ref()
        .expect("Out direction cannot be null when serialize")
        .id();

    format!(
        "RELATE {} -> {} -> {} {}",
        in_id.to_string(),
        record_id,
        out_id.to_string(),
        Data::ContentExpression(target.data.clone().serialize()).to_string()
    )
}