fn generate<P, E>(
    writer: &mut FileWriter,
    service: &Service<'_>,
    protocol_generator: P,
    error_type_generator: E,
) -> IoResult
where
    P: GenerateProtocol,
    E: GenerateErrorTypes,
{
    // TODO: `use futures::future;` isn't used by all crates: only include it when needed
    writeln!(
        writer,
        "// =================================================================
        //
        //                           * WARNING *
        //
        //                    This file is generated!
        //
        //  Changes made to this file will be overwritten. If changes are
        //  required to the generated code, the service_crategen project
        //  must be updated to generate the changes.
        //
        // =================================================================

        use std::error::Error;
        use std::fmt;

        use async_trait::async_trait;
        use rusoto_core::request::{{BufferedHttpResponse, DispatchSignedRequest}};
        use rusoto_core::region;
        use rusoto_core::credential::ProvideAwsCredentials;
        use rusoto_core::{{Client, RusotoError}};
    "
    )?;

    protocol_generator.generate_prelude(writer, service)?;
    generate_types(writer, service, &protocol_generator)?;
    error_type_generator.generate_error_types(writer, service)?;
    generate_client(writer, service, &protocol_generator)?;
    generate_tests(writer, service)?;

    Ok(())
}
The quick brown fox jumps over the lazy dog
service_crategen/src/commands/generate/codegen/mod.rs