use serde_json::Value;
use super::graphql_attrs;
use super::serde_attrs::{self, ContainerAttrs};
pub(super) struct WireNames {
pub(super) serde: ContainerAttrs,
pub(super) graphql: Option<graphql_attrs::ContainerAttrs>,
}
impl WireNames {
pub(super) fn field(
&self,
rust_name: &str,
raw: &[Value],
serde: &serde_attrs::FieldAttrs,
) -> Option<String> {
let Some(g) = &self.graphql else {
return (!serde.skip)
.then(|| serde_attrs::wire_name_field(rust_name, serde, &self.serde));
};
let f = graphql_attrs::field(raw);
(!f.skip).then(|| graphql_attrs::wire_name_field(rust_name, &f, g))
}
pub(super) fn variant(&self, rust_name: &str, raw: &[Value]) -> String {
match &self.graphql {
Some(g) => graphql_attrs::wire_name_variant(rust_name, &graphql_attrs::variant(raw), g),
None => {
serde_attrs::wire_name_variant(rust_name, &serde_attrs::container(raw), &self.serde)
}
}
}
}