in compiler/crates/relay-transforms/src/handle_fields/handle_field_util.rs [148:187]
fn extract_handle_field_directive_args_helper(
handle_field_directive: &Directive,
handler_arg_name: StringKey,
) -> HandleFieldDirectiveArgs<'_> {
let mut handler_arg = None;
let mut key_arg = None;
let mut filters_arg = None;
let mut dynamic_key_arg = None;
let mut handle_args_arg: Option<&Argument> = None;
for arg in handle_field_directive.arguments.iter() {
if arg.name.item == handler_arg_name {
if let Value::Constant(constant_val) = &arg.value.item {
handler_arg = Some((arg, constant_val));
}
} else if arg.name.item == *KEY_ARG_NAME {
if let Value::Constant(constant_val) = &arg.value.item {
key_arg = Some((arg, constant_val));
}
} else if arg.name.item == *FILTERS_ARG_NAME {
if let Value::Constant(constant_val) = &arg.value.item {
filters_arg = Some((arg, constant_val));
}
} else if arg.name.item == *DYNAMIC_KEY_ARG_NAME {
if let Value::Variable(_) = arg.value.item {
dynamic_key_arg = Some((arg, &arg.value.item));
}
} else if arg.name.item == *HANLDE_ARGS_NAME {
handle_args_arg = Some(arg)
}
}
HandleFieldDirectiveArgs {
handler_arg,
key_arg,
filters_arg,
dynamic_key_arg,
handle_args_arg,
}
}