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: lib.rs
    path of file: ./repos/bottlerocket/sources/models/model-derive/src
    
    the code of the file until where you have to start completion: /*!
# Overview

This module provides a attribute-style procedural macro, `model`, that makes sure a struct is
ready to be used as an API model.

The goal is to reduce cognitive overhead when reading models.
We do this by automatically specifying required attributes on structs and fields.

Several arguments are available to override default behavior; see below.

# 
    
pub fn model(args: TokenStream, input: TokenStream) -> TokenStream {
    // Parse args
    let args: ParsedArgs = ParsedArgs::from_list(
        &NestedMeta::parse_meta_list(args.into())
            .expect("Unable to parse arguments to `model` macro"),
    )
    .expect("Unable to parse arguments to `model` macro");
    let mut helper = ModelHelper::from(args);

    // Parse and modify source
    let mut ast: ItemStruct =
        syn::parse(input).expect("Unable to parse item `model` was placed on - is it a struct?");
    helper.visit_item_struct_mut(&mut ast);
    ast.into_token_stream().into()
}