You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: query_type.rs
    path of file: ./repos/prisma-engines/query-engine/schema/src/build/output_types
    
    the code of the file until where you have to start completion: use super::*;
use input_types::fields::arguments;

/// Builds the root `Query` type.
pub(crate) fn query_fields(ctx: &QuerySchema) -> Vec<FieldFn> {
    let mut fields: Vec<FieldFn> = Vec::with_capacity(ctx.internal_data_model.schema.db.models_count() * 6);

    macro_rules! field {
        ($f:ident, $model_var:expr) => {{
            let model = $model_var.clone();
            fields.push(Box::new(move |ctx| $f(ctx, model.clone())));
        }};
    }

    for model in ctx.internal_data_model.models() {
        field!(find_first_field, model);
        field!(find_
    
fn find_first_or_throw_field(ctx: &QuerySchema, model: Model) -> OutputField<'_> {
    let field_name = format!("findFirst{}OrThrow", model.name());
    let model_id = model.id;
    let cloned_model = model.clone();

    field(
        field_name,
        move || {
            arguments::ManyRecordsSelectionArgumentsBuilder::new(ctx, model)
                .include_distinct()
                .include_relation_load_strategy()
                .build()
        },
        OutputType::object(objects::model::model_object_type(ctx, cloned_model)),
        Some(QueryInfo {
            model: Some(model_id),
            tag: QueryTag::FindFirstOrThrow,
        }),
    )
    .nullable()
}