use syn::parse_str;
use crate::codegen::utils::to_pascal_case;
pub(super) fn resolve_target_query_path(conn: &valence_core::SchemaConnection) -> String {
let target_table_pascal = to_pascal_case(&conn.to_table);
let model_path = conn
.model_path
.clone()
.unwrap_or_else(|| format!("crate::generated::{target_table_pascal}"));
format!("{model_path}Query")
}
pub(super) fn resolve_target_query_type(conn: &valence_core::SchemaConnection) -> syn::Type {
let query_path = resolve_target_query_path(conn);
parse_str(&query_path).unwrap_or_else(|_| {
#[allow(clippy::expect_used)] {
parse_str("crate::generated::UnknownQuery").expect("fallback query type")
}
})
}
pub(super) fn resolve_target_query_type_with_lifetime(
conn: &valence_core::SchemaConnection,
) -> syn::Type {
let query_path = resolve_target_query_path(conn);
let with_lt = format!("{query_path}<'a>");
parse_str(&with_lt).unwrap_or_else(|_| {
#[allow(clippy::expect_used)] {
parse_str("crate::generated::UnknownQuery<'a>").expect("fallback query type")
}
})
}
pub(super) fn emits_typed_connection_hop(_conn: &valence_core::SchemaConnection) -> bool {
true
}
#[allow(dead_code)] pub(super) fn is_same_crate_connection(conn: &valence_core::SchemaConnection) -> bool {
match &conn.model_path {
Some(path) => path.starts_with("crate::"),
None => true,
}
}