use crate::codegen::ir::hir::misc::item_fn::GeneralizedItemFn;
use crate::utils::syn_utils::ty_to_string;
use itertools::Itertools;
use quote::ToTokens;
use serde::{Serialize, Serializer};
pub(crate) fn serialize_syn<T: ToTokens, S: Serializer>(
value: &T,
s: S,
) -> Result<S::Ok, S::Error> {
quote::quote!(#value).to_string().serialize(s)
}
pub(crate) fn serialize_vec_syn<T: ToTokens, S: Serializer>(
values: &[T],
s: S,
) -> Result<S::Ok, S::Error> {
let values = values
.iter()
.map(|value| quote::quote!(#value).to_string())
.collect_vec();
values.serialize(s)
}
pub(crate) fn serialize_generalized_item_fn<S: Serializer>(
x: &GeneralizedItemFn,
s: S,
) -> Result<S::Ok, S::Error> {
s.serialize_str(&format!(
"GeneralizedItemFn(name={}, vis={:?}, attrs=[{}])",
x.name(),
x.vis_raw(),
x.attrs().iter().map(ty_to_string).join(", "),
))
}