fn extract_handle_field_directive_args_helper()

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,
    }
}