use super::{FieldType, StampType};
use quote::__private::TokenStream;
use quote::quote;
use syn::Ident;
pub fn add_value_to_params(
ident: &Ident,
name: &str,
typ: &FieldType,
stamp: Option<StampType>,
) -> TokenStream {
match typ {
FieldType::DateTimeUtc(_ty) => {
if stamp.is_some() {
match stamp.unwrap() {
StampType::Created => {
quote!(
match mode {
::cypher_dto::StampMode::Create => query,
_ => query.param(
&::cypher_dto::format_param(#name, prefix),
self.#ident.fixed_offset()
)
}
)
}
StampType::Updated => {
quote!(
match mode {
::cypher_dto::StampMode::Read => query.param(
&::cypher_dto::format_param(#name, prefix),
self.#ident.fixed_offset()
),
_ => query,
}
)
}
}
} else {
quote!(
query.param(
&::cypher_dto::format_param(#name, prefix),
self.#ident.fixed_offset()
)
)
}
}
FieldType::OptionDateTimeUtc(_ty) => {
if stamp.is_some() {
match stamp.unwrap() {
StampType::Created => {
quote!(
match mode {
::cypher_dto::StampMode::Create => query,
_ => query.param(
&::cypher_dto::format_param(#name, prefix),
self.#ident.map(|v| v.fixed_offset())
)
}
)
}
StampType::Updated => {
quote!(
match mode {
::cypher_dto::StampMode::Read => query.param(
&::cypher_dto::format_param(#name, prefix),
self.#ident.map(|v| v.fixed_offset())
),
_ => query,
}
)
}
}
} else {
quote!(
query.param(
&::cypher_dto::format_param(#name, prefix),
self.#ident.map(|v| v.fixed_offset())
)
)
}
}
FieldType::Num(_ty, num) => {
if let Some(cast) = num.param_cast() {
let ty = cast.to_type();
quote!(
query.param(
&::cypher_dto::format_param(#name, prefix),
self.#ident as #ty
)
)
} else {
quote!(
query.param(
&::cypher_dto::format_param(#name, prefix),
self.#ident
)
)
}
}
FieldType::OptionNum(_ty, num) => {
if let Some(cast) = num.param_cast() {
let ty = cast.to_type();
quote!(
query.param(
&::cypher_dto::format_param(#name, prefix),
self.#ident.map(#ty::from)
)
)
} else {
quote!(
query.param(
&::cypher_dto::format_param(#name, prefix),
self.#ident
)
)
}
}
FieldType::OptionOther(_ty) => {
quote!(
query.param(
&::cypher_dto::format_param(#name, prefix),
self.#ident.clone()
)
)
}
FieldType::Other(_ty) => {
quote!(
query.param(
&::cypher_dto::format_param(#name, prefix),
self.#ident.clone()
)
)
}
}
}